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;
}
是不是drawtext是自绘的时候的唯一显示文字的方法啊setwindowtext貌似会崩溃
单线程的情况下,setwindowtext内部会SendMessage(...,WM_SETTEXT,...);是可以导致死机,而且已经自绘了,当然所有的东西都要自己画上去
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, "按钮");
EndPaint(hWnd, &ps);