问题: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设置断点后, 程序就只在这两点之间运行, 为什么????
循环应该在这里: while (GetMessage(&Message,0,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); } 这个循环负责分配所有的消息。 你的消息处理函数是WndProc。它负责判断消息类型:switch,程序按照你判断的类型执行代码。 你如果下边有InitWindowsClass等函数,那是在main中已经执行完了的。 参见(一个完整程序例子) 劝你看看深入浅出MFC。 如果你对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设置断点后, 程序就只在这两点之间运行, 为什么????这个问题有好的意见或
建议,请留言
|