#include<windows.h>
#include"1.h"
#pragma
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int x[]={BS_PUSHBUTTON,BS_DEFPUSHBUTTON,BS_CHECKBOX,BS_AUTOCHECKBOX,BS_RADIOBUTTON,BS_3STATE, BS_AUTO3STATE,BS_GROUPBOX,BS_AUTORADIOBUTTON,BS_OWNERDRAW};
    int xshu= ( sizeof(x) ) / ( sizeof(x[0]) );
static HWND childhwnd[10];
switch (message)
    {
case WM_CREATE:
{
childhwnd[0]=CreateWindow(L"button",L"微软操作系统", WS_CHILD | WS_VISIBLE  | BS_PUSHBUTTON ,
0,0,100,50,hwnd,0,0,0);
HDC hdc=GetDC(childhwnd[0]);
SetTextColor(hdc,RGB(255,0,0) );
SetWindowText(childhwnd[0],L"FF");
ReleaseDC(childhwnd[0],hdc);
}
break;

case WM_LBUTTONDOWN:
{
HDC hdc=GetDC(childhwnd[0]);
SetTextColor(hdc,RGB(255,0,0) );
TextOut(hdc,200,200,L"FFF",3);
ReleaseDC(childhwnd[0],hdc);
}
break;

case WM_LBUTTONUP:
{
EnableWindow(childhwnd[0],1);
}
break;
        case WM_DESTROY:
{
PostQuitMessage (0);
break;
}
        default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
        return 0;
}   
int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int iCmdShow)
{
WNDCLASS wndclass;
wndclass.style = CS_VREDRAW | CS_HREDRAW | CS_DBLCLKS;
wndclass.lpfnWndProc  = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(0,IDI_APPLICATION);
wndclass.hCursor =LoadCursor(0,IDC_ARROW);
wndclass.hbrBackground = static_cast<HBRUSH>(  GetStockObject(COLOR_ACTIVEBORDER ) );
wndclass.lpszMenuName = 0;
wndclass.lpszClassName =L"实验"; RegisterClass(&wndclass); HWND hwnd ; hwnd= CreateWindow(L"实验",L"标题",  WS_OVERLAPPEDWINDOW | WS_VSCROLL |WS_VISIBLE ,100,100,500,500,0,0,hInstance,0);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd); MSG msg;
while( GetMessage(&msg,0,0,0))
{

TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
红色部分没有效果,蓝色部分确实是红的

解决方案 »

  1.   

    你需要子类化button,SetWindowLong(..,GWL_WNDPROC, ...);处理WM_DRAWITEM,当然你的Button创建CreateWindow的时候带上BS_OWNERDRAW属性
    MSDN上的CButton类的DrawItem中有段例子代码,lz可以参考一下
      

  2.   

    首先,我将楼主的代码复制过来后并没有起作用(既在Client区域内点击鼠标左键按钮字色并没有变红,而只是在屏幕上用红色显示了FFF);其次,如果想改变按钮的颜色的话,楼主需要将按钮属性设置为BS_OWNERDRAW,然后在按钮的消息响应函数中对WM_DRAWITEM消息进行响应才行