2015-06-13 91 views
-2

如何在C++/MASM32中更改Rectangle function的邊框顏色?在C++中更改矩形函數的邊框顏色

+3

要鏈接到美國在第一行的文件:*矩形用概述使用當前筆*。所以[select](https://msdn.microsoft.com/en-us/library/windows/desktop/dd162957%28v=vs.85%29.aspx)當前[pen](https://msdn.microsoft .COM/EN-US /庫/窗/臺式機/ dd183509%28V = vs.85%29.aspx)。 – GSerg

回答

2

你可以嘗試這樣的事情,我只是舉個例子,你可以根據你的需求來改變它。

BOOL CRectangleDlg::OnEraseBkgnd(CDC* pDC) 
{ 
    CBrush brushBlue(RGB(0, 0, 255));// inner color blue. 
    CBrush* pOldBrush = pDC->SelectObject(&brushBlue); 

    // create and select a thick, black pen 
    CPen penBlack; 
    penBlack.CreatePen(PS_SOLID, 3, RGB(255, 0, 0));// red color with width 3 
    CPen* pOldPen = pDC->SelectObject(&penBlack); 

    // get our client rectangle 
    CRect rect; 
    GetClientRect(rect);// pass rect coordinates here 

    // shrink our rect 20 pixels in each direction 
    rect.DeflateRect(20, 20); 

    // draw a thick black rectangle filled with blue 

    pDC->Rectangle(rect); 

    // put back the old objects 
    pDC->SelectObject(pOldBrush); 
    pDC->SelectObject(pOldPen); 

    return true;//CDialog::OnEraseBkgnd(pDC); 
} 
0

這裏是一個快速MASM32的例子,我颳起了快速的爲您提供:

include masm32rt.inc 

RGB MACRO red, green, blue 
    EXITM % blue SHL 16 + green SHL 8 + red 
ENDM 

WIDTH_MAIN_WINDOW  equ 550 
HEIGHT_MAIN_WINDOW  equ 300 

.data 
szWndClsMain   BYTE "RECT_MAIN", 0 
szAppName    BYTE "Rectangle Border Color Example", 0 

.code 
start: 

    call StartUp 

    push 0 
    call ExitProcess 

StartUp proc uses ebx 
LOCAL msg:MSG 
LOCAL hInst, hMain:DWORD 
    push NULL 
    call GetModuleHandle 
    mov  hInst, eax  

    call RegisterClasses 

    ; ##### Coords to center window 
    invoke GetSystemMetrics, SM_CXSCREEN 
    sub  eax, WIDTH_MAIN_WINDOW 
    shr  eax, 1 
    xchg eax, ebx 

    invoke GetSystemMetrics, SM_CYSCREEN 
    sub  eax, HEIGHT_MAIN_WINDOW 
    shr  eax, 1 

    ; ##### Create main window 
    invoke CreateWindowEx,WS_EX_APPWINDOW or WS_EX_CONTROLPARENT, \ 
          offset szWndClsMain, \ 
          offset szAppName, \ 
          WS_OVERLAPPED or WS_SYSMENU or WS_MINIMIZEBOX or WS_CLIPCHILDREN or WS_VISIBLE, \ 
          ebx, eax, \ 
          WIDTH_MAIN_WINDOW, HEIGHT_MAIN_WINDOW, \ 
          HWND_DESKTOP, NULL, \ 
          hInst, NULL 
    mov  hMain, eax 

    .WHILE TRUE 
     invoke GetMessage, ADDR msg,NULL,0,0 
     .BREAK .IF (!eax) 
     invoke IsDialogMessage, addr hMain, ADDR msg 
     .IF eax ==FALSE 
      invoke TranslateMessage, ADDR msg 
      invoke DispatchMessage, ADDR msg 
     .ENDIF 
    .ENDW 
    ret 
StartUp endp 

RegisterClasses proc 
LOCAL wc:WNDCLASSEX 

    ; ##### Create main window 
    invoke RtlZeroMemory, addr wc, sizeof WNDCLASSEX 
    mov  wc.cbSize, SIZEOF WNDCLASSEX  
    mov  wc.style, CS_HREDRAW or CS_VREDRAW 
    mov  wc.lpfnWndProc, OFFSET ProcWndMain  
    mov  wc.hInstance, esi      
    mov  wc.hbrBackground, COLOR_3DFACE + 1 
    mov  wc.lpszClassName, OFFSET szWndClsMain 
    invoke RegisterClassEx, addr wc 

    ret 
RegisterClasses endp 

ProcWndMain proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM 
LOCAL ps:PAINTSTRUCT, pOldPen, pNewPen:DWORD 

    mov  eax,uMsg 
    .if eax==WM_CREATE 

    .elseif eax == WM_PAINT 
     invoke BeginPaint, hWin, addr ps 

     invoke CreatePen,PS_SOLID, 3, RGB(255, 0, 0)  ; Red 
     mov  pNewPen, eax 

     invoke SelectObject, ps.hdc, eax 
     mov  pOldPen, eax 

     invoke Rectangle, ps.hdc, 10, 10, 200, 200 

     invoke SelectObject, ps.hdc, pOldPen 
     invoke DeleteObject, pNewPen 

     invoke CreatePen,PS_SOLID, 3, RGB(0,0,255)  ; blue 
     mov  pNewPen, eax 

     invoke SelectObject, ps.hdc, eax 
     mov  pOldPen, eax 

     invoke Rectangle, ps.hdc, 250, 10, 445, 200 

     invoke SelectObject, ps.hdc, pOldPen 
     invoke DeleteObject, pNewPen   


     invoke EndPaint, hWin, addr ps 

    .elseif eax==WM_CLOSE 
     invoke DestroyWindow,hWin 
    .elseif eax==WM_DESTROY 
     invoke PostQuitMessage,NULL 
    .else 
     invoke DefWindowProc,hWin,uMsg,wParam,lParam 
     ret 
    .endif 
    xor eax,eax 
    ret 
ProcWndMain endp   
end start 

enter image description here

+0

GSerg,Himanshu,Gunner,非常感謝! –