realista paso para niños lapiz infantil faciles dibujos dibujo dibujar como cabeza caballos caballo c++ mfc drawing nonclient

c++ - paso - ¿Cómo dibujar en el área no cliente?



como dibujar un caballo realista (4)

Para dibujar en el área que no es cliente, debe obtener el DC "ventana" (en lugar de DC "cliente") y dibujar en el DC "ventana".

Me gustaría poder hacer un dibujo a la derecha de la barra de menú, en el área no cliente de una ventana.

¿Es esto posible, usando C ++ / MFC?


Si solo desea algo en la barra de menú, quizás sea más fácil / más limpio agregarlo como un elemento de menú alineado a la derecha. De esta manera, también funcionará con diferentes temas de Windows, etc.


Charlie acertó en la respuesta con WM_NCPAINT . Si está utilizando MFC, el código se vería así:

// in the message map ON_WM_NCPAINT() // ... void CMainFrame::OnNcPaint() { // still want the menu to be drawn, so trigger default handler first Default(); // get menu bar bounds MENUBARINFO menuInfo = {sizeof(MENUBARINFO)}; if ( GetMenuBarInfo(OBJID_MENU, 0, &menuInfo) ) { CRect windowBounds; GetWindowRect(&windowBounds); CRect menuBounds(menuInfo.rcBar); menuBounds.OffsetRect(-windowBounds.TopLeft()); // horrible, horrible icon-drawing code. Don''t use this. Seriously. CWindowDC dc(this); HICON appIcon = (HICON)::LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); ::DrawIconEx(dc, menuBounds.right-18, menuBounds.top+2, appIcon, 0,0, 0, NULL, DI_NORMAL); ::DestroyIcon(appIcon); } }


Debería intentar manejar WM_NCPAINT. Esto es similar a un mensaje WM_PAINT normal, pero trata de toda la ventana, en lugar de solo el área del cliente. Los documentos de MSDN en WM_NCPAINT proporcionan el siguiente código de ejemplo:

case WM_NCPAINT: { HDC hdc; hdc = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN); // Paint into this DC ReleaseDC(hwnd, hdc); }

Este código está destinado a ser utilizado en el ciclo de mensajes de su solicitud, que se organiza canónicamente utilizando una gran declaración de ''cambio''.

Como se señala en el ejemplo de MFC de Shog, asegúrese de llamar a la versión predeterminada, que en este ejemplo significaría una llamada a DefWindowProc.