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

来源:百度知道 编辑:UC知道 时间:2024/06/01 02:17:41
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,HWN

循环应该在这里:
while (GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
这个循环负责分配所有的消息。
你的消息处理函数是WndProc。它负责判断消息类型:switch,程序按照你判断的类型执行代码。
你如果下边有InitWindowsClass等函数,那是在main中已经执行完了的。
参见http://blog.sina.com.cn/s/blog_4cc0820301000amv.html(一个完整程序例子)
劝你看看深入浅出MFC。

windows的消息机制

怎么了?不是很正常吗??