LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc; static HWND hButton=NULL; static HWND hCheckBox=NULL; static LPCREATESTRUCT pcs=NULL; static HFONT hFont=NULL; switch (message)
{ case WM_CREATE:
{ hFont = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));     pcs=(LPCREATESTRUCT)lParam;
//默认创建button
   hButton=CreateWindow(_T("button"),_T("按钮"),WS_CHILD|WS_VISIBLE |BS_PUSHBUTTON|BS_OWNERDRAW,100,100,150,150,hWnd,(HMENU)IDC_BUTTON1, pcs->hInstance ,NULL);

   ShowWindow(hButton,SW_SHOW);
   
   return 0;
}
break; case WM_CTLCOLORBTN:
{

SetTextColor((HDC)wParam,RGB(255,0,0)); //前景
SetTextColor((HDC)wParam,RGB(255,255,255));
HFONT hOldFont=(HFONT)SelectObject((HDC)wParam,(HGDIOBJ)&hFont); SelectObject((HDC)wParam,hOldFont); return (LRESULT)GetStockObject(BLACK_BRUSH);  
}
break;
case WM_COMMAND:
wmId    = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
{ DestroyWindow(hButton); hButton=NULL;
hCheckBox=CreateWindow(_T("button"),_T("checkbox"),WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,100,100,150,150,hWnd,(HMENU)IDC_CHECK2, hInst ,NULL); int errCode=GetLastError(); ShowWindow(hCheckBox,SW_SHOW); } //DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break; case WM_DESTROY:
DeleteObject(hFont);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
} return 0;
}

解决方案 »

  1.   

    WM_DRAWITEM为什么没有看到呢?DrawText()也没有...
      

  2.   


    是不是drawtext是自绘的时候的唯一显示文字的方法啊setwindowtext貌似会崩溃
      

  3.   

    TextOut()也可以,petizold书chapter 9
    单线程的情况下,setwindowtext内部会SendMessage(...,WM_SETTEXT,...);是可以导致死机,而且已经自绘了,当然所有的东西都要自己画上去
      

  4.   

    case WM_PAINT: 
    hdc = BeginPaint(hWnd, &ps);
    TextOut(hdc, "按钮");
    EndPaint(hWnd, &ps);