i设置断点后, 程序老在WndProc里循环, 为什么??(详见问题补充)

LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)//断点1{//处理窗口消息的... LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) // 断点1
{
//处理窗口消息的窗口过程函数

PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
case WM_CREATE: // 创建窗口消息么????????
case WM_SHOWWINDOW:
case WM_KEYDOWN:
case WM_COMMAND:
//.........
return ::DefWindowProc(hWnd, message, wParam, lParam);
case WM_LBUTTONDOWN:
int ScreenWidth;
int ScreenLength;
RECT rcWindow; // 矩形结构体

::GetWindowRect(hWnd,&rcWindow);
ScreenWidth=GetSystemMetrics(SM_CXSCREEN); // 取得当前显示器像素
ScreenLength=GetSystemMetrics(SM_CYSCREEN);
//鼠标单击,设置窗口位置
::SetWindowPos(hWnd,HWND_TOP,ScreenWidth/4,
ScreenWidth/4,ScreenLength/2,ScreenLength/2,SWP_SHOWWINDOW);
Sleep(1000);

::SetWindowPos(hWnd,HWND_TOP,ScreenWidth/3,
ScreenWidth/3,ScreenLength/3,ScreenLength/3,SWP_SHOWWINDOW);
Sleep(100);
::SetWindowPos(hWnd,HWND_TOP,ScreenWidth/4,
ScreenWidth/4,ScreenLength/2,ScreenLength/2,SWP_SHOWWINDOW);
Sleep(100);
::SetWindowPos(hWnd,HWND_TOP,rcWindow.left,rcWindow.top,
rcWindow.right-rcWindow.left,rcWindow.bottom-rcWindow.top,
SWP_SHOWWINDOW);

return ::DefWindowProc(hWnd, message, wParam, lParam);

case WM_RBUTTONDOWN:
//单击鼠标右键,隐藏、显示窗口
ShowWindow(hWnd,SW_HIDE);
Sleep(300);
ShowWindow(hWnd,SW_SHOW);

return ::DefWindowProc(hWnd, message, wParam, lParam);
case WM_PAINT:
//绘制窗口
hdc = BeginPaint(hWnd, &ps);
RECT rt;
GetClientRect(hWnd, &rt);
::SetBkColor(hdc,::GetSysColor(COLOR_BACKGROUND));
::SetTextColor(hdc,RGB(255,255,255));
DrawText(hdc, "My window created by win32 API",-1,&rt, DT_CENTER);

EndPaint(hWnd, &ps);
return ::DefWindowProc(hWnd, message, wParam, lParam);
break;

case WM_DESTROY:
//主窗口关闭时,给UI线程消息循环发送WM_QUIT消息,线程退出代码为0
PostQuitMessage(0);
break;
default:
//调用缺省的消息处理过程处理当前消息
return ::DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
} // 断点2

我在断点1和断点2设置断点后, 程序就只在这两点之间运行, 为什么????
我不知道是不是正常啊, 所以才在这提问的.
那位能帮我详细解答一下.
如果真只能在这两断点之间运行, 那程序后边的代码怎么运行啊,怎么才能运行到程序的结束啊???
展开
 我来答
summonerx
2008-11-06 · TA获得超过180个赞
知道答主
回答量:464
采纳率:0%
帮助的人:0
展开全部
循环应该在这里:
while (GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
这个循环负责分配所有的消息。
你的消息处理函数是WndProc。它负责判断消息类型:switch,程序按照你判断的类型执行代码。
你如果下边有InitWindowsClass等函数,那是在main中已经执行完了的。
参见http://blog.sina.com.cn/s/blog_4cc0820301000amv.html(一个完整程序例子)
劝你看看深入浅出MFC。
coolasiam
2008-11-05 · TA获得超过106个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:102万
展开全部
windows的消息机制
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhsh955
2008-11-06 · 超过21用户采纳过TA的回答
知道答主
回答量:282
采纳率:0%
帮助的人:72.8万
展开全部
怎么了?不是很正常吗??
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式