刚学了WndProc(),就遇到一个大问题,
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
HDC hdc;
switch(message){
case WM_LBUTTONDOWN:
static int x,y;
HPEN pen;
x=LOWORD(lParam);
y=HIWORD(lParam);
hdc=GetDC(hwnd);
MoveToEx(hdc,x,y,NULL);
LineTo(hdc,x,y);
pen=(HPEN)GetStockObject(BLACK_PEN);
SelectObject(hdc,pen);
LineTo(hdc,x,y);
DeleteObject(pen);
ReleaseDC(hwnd,hdc);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"确定退出吗?","确认!",MB_YESNO))
{
DestroyWindow(hwnd);
} ;
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
DefWindowProc(hwnd, message, wParam, lParam);
break;
}
MessageBox(NULL,"完成","确认!",MB_YESNO);
return message;
}
这段代码很奇怪。。。。
如果回调函数返回接收到的message的话,那么MessageBox会一直重复,这应该没有什么问题,但是如果return 0的话,MessageBox只会运行三次(至少在我的机子上,我用了VC6和VS2012,都是这个问题),还有如果不在倒数第6段DefWindowProc(hwnd, message, wParam, lParam);前加上return ,把DefWindowProc()产生的值return的话,return message才能看到窗口,return 0就不行(这有什么关系??)
最可恨的是直线绘制也不能用,WM_CLOSE时YES NO都退出不了。