2015-06-13 5 views
-2

Как я могу изменить цвет границы Rectangle function в C++/MASM32?Изменить цвет границы функции Прямоугольник в 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% 2 = 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, Наводчик, Большое вам спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^