user-0 提问: 关于MessageBox对话框有一点很疑惑..

回复:
user: user-1
content: case WM_PAINT:          return 0 ;  要么 自己 画， 要么 不 响应这个 消息， return 0；什么 意思 ？ 那样 WM_PAINT 会 永远 存在 ！！！

user: user-0
content: 引用 8 楼 hiroyukki 的回复:开了眼界了谢谢啦阿喂...不是让你们吐槽代码的啊 - -!。...我用基础的HelloWin模板也是这样...不知道ShowWindow在里面到底干了什么..．．．．

user: user-2
content: 开了眼界了谢谢啦

user: user-3
content: 开了眼界了

user: user-4
content: 开了眼界了谢谢啦

user: user-5
content: Spy++是捕获和跟踪Window消息用的。  VC6的话： Setting a Breakpoint on a Message Received by a Windows Function You can set message breakpoints to stop the debugger when a particular WndProc function message is received.  Note   Message breakpoints work only on x86- or Pentium-based systems.  To set a breakpoint on a message   From the Edit menu, click Breakpoints.  The Breakpoints dialog box appears.  Click the Messages tab.   In the Break At WndProc text box, type the name of the Windows function.  If you are setting a breakpoint during a debug session, the list contains the exported functions in your project.   In the Set One Breakpoint For Each Message To Watch list box, select the message.   To set another breakpoint, press ENTER, and then repeat steps 3 and 4.  The Breakpoints list displays the currently active breakpoints.  Click OK to set the breakpoints.  Note If you interrupt execution while Windows or other system code is running, the results can be unpredictable.

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:学会使用Spy++是楼主的当务之急。侦测线程跟进程ID的东西么..不怎么会用..QAQ

user: user-5
content: 学会使用Spy++是楼主的当务之急。

user: user-0
content: 引用 1 楼 schlafenhamster 的回复:需要 看到 完整 代码。那请您别笑话我...源代码有点乱..而且是中文命名的.. shell.h #ifndef _SHELL_H_ #define _SHELL_H_  #include <Windows.h>   LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM) ; //回调函数 int 精灵按键映射() ;  #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)//按键映射宏 #define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)  extern LARGE_INTEGER               cpu_rate  ;//CPU频率 extern LARGE_INTEGER               TDSL      ;//函数内部计时变量  class MyFrame	   //简单的窗口类 { public: 	HWND  窗口句柄 ; 	int   创建窗口(HINSTANCE,int,int,int,int) ; private: 	WNDCLASS wndclass ; } ;  class Bitmap	//简单的图片类 { public:    HDC   屏幕缓冲, 	     画布缓冲, 	     背景缓冲, 	     精灵缓冲,          额外缓冲;     int   画布状态, 		 背景状态, 		 精灵状态, 		 额外状态;     Bitmap():画布状态(0),背景状态(0),精灵状态(0),额外状态(0){}    ~Bitmap() ; public:    HBITMAP 位图_画布句柄,            位图_背景句柄, 		   位图_精灵句柄, 		   位图_物品句柄;     int 设置屏幕缓冲(HWND) ;    int 读入精灵到缓冲() ;    int 读入背景到缓冲() ;    int 读入物品到缓冲() ;    int 创建背景画布() ;    int 精灵映射按键() ; } ;  template <typename T>			  //填零(模板) 	void _asm0(T& ddstruct) ;  double 获得时间() ;  #endif shell.cpp #include "shell.h"  int MyFrame::创建窗口(HINSTANCE hInstance,int x,int y,int width,int length) {   this->wndclass.style         =  CS_HREDRAW | CS_VREDRAW ;   this->wndclass.lpfnWndProc   =  WndProc ;   this->wndclass.cbClsExtra    =  0 ;   this->wndclass.cbWndExtra    =  0 ;   this->wndclass.hInstance     =  hInstance ;   this->wndclass.hIcon         =  LoadIcon(NULL,IDI_APPLICATION) ;   this->wndclass.hCursor       =  LoadCursor(NULL,IDC_ARROW) ;   this->wndclass.hbrBackground =  (HBRUSH)GetStockObject(BLACK_BRUSH) ;   this->wndclass.lpszMenuName  =  NULL ;   this->wndclass.lpszClassName =  TEXT("shell") ;    RegisterClass(&wndclass) ;      this->窗口句柄 = CreateWindow(TEXT("shell"),TEXT("shell"),WS_OVERLAPPEDWINDOW,x,y,width,length,NULL,NULL,hInstance,NULL) ;      ShowWindow(this->窗口句柄,SW_NORMAL) ;    MessageBox(NULL,TEXT("用于测试的消息框"),TEXT("CSDN"),MB_OK) ;    UpdateWindow(this->窗口句柄) ;      return 0x10 ; }  int Bitmap::设置屏幕缓冲(HWND hWnd) {    屏幕缓冲 = GetDC(hWnd) ;    if(屏幕缓冲 == NULL)    { 	   MessageBox(NULL,TEXT("设置屏幕缓冲失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 	   return 0x10 ;    }        else 	   return 0 ; }  int Bitmap::读入背景到缓冲() { 	背景缓冲 = CreateCompatibleDC(this->屏幕缓冲) ; 	if(背景缓冲 == NULL) 		{ 			MessageBox(NULL,TEXT("创建兼容缓冲失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 			return 2 ;  	    } 	位图_背景句柄 = (HBITMAP)LoadImage(NULL,TEXT("map.bmp"),IMAGE_BITMAP,256,240,LR_LOADFROMFILE) ;  	  if(位图_背景句柄 == NULL) 		{ 			MessageBox(NULL,TEXT("读取位图失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 			return 1 ;  	    } 	  else 		   背景状态 = 1 ; 	  SelectObject(背景缓冲,位图_背景句柄) ;  	  return 0 ; } int Bitmap::创建背景画布() {      画布缓冲 = CreateCompatibleDC(屏幕缓冲) ;     if(画布缓冲 == NULL)       {    	     MessageBox(NULL,TEXT("创建兼容缓冲失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 			return 2 ;       }    位图_画布句柄 = CreateCompatibleBitmap(屏幕缓冲,256,240) ;     if(位图_画布句柄 == NULL) 	    {  			MessageBox(NULL,TEXT("创建兼容位图失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 			return 1 ;  	    }    else	 画布状态 = 1 ;         return 0 ;  } int Bitmap::读入精灵到缓冲() {   精灵缓冲 = CreateCompatibleDC(this->屏幕缓冲) ;  	if(精灵缓冲 == NULL) 		{ 			MessageBox(NULL,TEXT("创建兼容缓冲失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 			return 2 ;  	    } 	位图_精灵句柄 = (HBITMAP)LoadImage(NULL,TEXT("mario.bmp"),IMAGE_BITMAP,192,160,LR_LOADFROMFILE) ;  	  if(位图_精灵句柄 == NULL) 		{ 			MessageBox(NULL,TEXT("读取精灵失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 			return 1 ;  	    } 	  else 		   精灵状态 = 1 ;  	  SelectObject(精灵缓冲,位图_精灵句柄) ;  	  return 0 ; } int Bitmap::读入物品到缓冲() {   额外缓冲 = CreateCompatibleDC(this->屏幕缓冲) ;  	if(额外缓冲 == NULL) 		{ 			MessageBox(NULL,TEXT("创建兼容缓冲失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 			return 2 ;  	    } 	位图_物品句柄 = (HBITMAP)LoadImage(NULL,TEXT("item.bmp"),IMAGE_BITMAP,64,80,LR_LOADFROMFILE) ;  	  if(位图_物品句柄 == NULL) 		{ 			MessageBox(NULL,TEXT("读取精灵失败"),TEXT("Bitmap类"),MB_ICONERROR) ; 			return 1 ;  	    } 	  else 		   额外状态 = 1 ;  	  SelectObject(额外缓冲,位图_物品句柄) ;  	  return 0 ; } Bitmap::~Bitmap() {   if(背景状态 == 1)   { 	 DeleteObject(位图_背景句柄) ;      DeleteDC(背景缓冲) ;   }   if(画布状态 == 1)   { 	 DeleteObject(位图_画布句柄) ;      DeleteDC(画布缓冲) ;   }   if(精灵状态 == 1)   { 	 DeleteObject(位图_精灵句柄) ;      DeleteDC(精灵缓冲) ;   }   if(额外状态 == 1)   { 	 DeleteObject(位图_物品句柄) ;      DeleteDC(额外缓冲) ;   } } template <typename T> 	void _asm0(T& ddstruct)  	{ 	   T* _PTR_ = &ddstruct ; 	   unsigned int num = sizeof(ddstruct)/4 ;         __asm PUSH ECX         __asm PUSH EDI        __asm PUSH EAX         __asm CLD                                __asm MOV  EAX,0       __asm MOV ECX,num        __asm MOV  EDI,_PTR_   __asm REP STOSD         __asm POP  EAX         __asm POP EDI    __asm POP ECX  //////////////////Simple asm for writing zero   	    	   ddstruct.dwSize = sizeof(ddstruct) ; 	} double 获得时间() {    QueryPerformanceCounter(&TDSL) ;    return (TDSL.QuadPart); }  int Bitmap::精灵映射按键() { 	if(KEYDOWN('A')) 	{ 		MessageBeep(1) ; 	} 	return 0 ; }     WinMain #include <Windows.h> #include "shell.h"  MSG     消息结构 ; MyFrame 窗口内核 ; Bitmap  帧内核 ; double  time,tom ;  LARGE_INTEGER               cpu_rate  ; LARGE_INTEGER               TDSL ; //函数内部计时变量  int OnPaintBG() ; int __stdcall WinMain (HINSTANCE hInstance,HINSTANCE,PSTR,int) { 	   QueryPerformanceFrequency(&cpu_rate) ; 	    	   窗口内核.创建窗口(hInstance,400,500,264,267) ; 	    	   帧内核.设置屏幕缓冲(窗口内核.窗口句柄) ; 	   帧内核.创建背景画布() ; 	   帧内核.读入背景到缓冲() ; 	   帧内核.读入物品到缓冲() ; 	   帧内核.读入精灵到缓冲() ; 	    	  		time = 获得时间();  	   		while(TRUE)	  	   { 		   	  	     if(PeekMessage(&消息结构,NULL,0,0,PM_REMOVE)) 	       {               if(消息结构.message == WM_QUIT)                 break ; 	          TranslateMessage(&消息结构) ;  	          DispatchMessage(&消息结构) ; 	       } 		  帧内核.精灵映射按键() ; 	     Sleep(1) ; 	   }      return 消息结构.wParam ; }  LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) {   switch (message)     {       case WM_CREATE:        return 0 ;  	  case WM_PAINT:         return 0 ;  	  case WM_DESTROY:       PostQuitMessage(0) ;       return 0 ;     }    return DefWindowProc(hwnd,message,wParam,lParam) ; }

user: user-1
content: 需要 看到 完整 代码。

user: user-0
content: 引用 10 楼 schlafenhamster 的回复:case WM_PAINT:          return 0 ;  要么 自己 画， 要么 不 响应这个 消息， return 0；什么 意思 ？ 那样 WM_PAINT 会 永远 存在 ！！！谢了..一针见血...就是这个...我一直在while循环里面重绘窗口的...不知道回调函数WM_Paint消息会这样......

user: user-6
content: while(TRUE)             {                            if(PeekMessage(&消息结构,NULL,0,0,PM_REMOVE))            {               if(消息结构.message == WM_QUIT)                 break ;               TranslateMessage(&消息结构) ;                 DispatchMessage(&消息结构) ;            }           帧内核.精灵映射按键() ;          Sleep(1) ;        }   应该在创建窗体的那里 在updatewindows（）后面 不 不知可否