windows编程中关于“关闭窗口无法退出进程”的解决方法

一般会出现如下两种情况

1、WinMain函数中,最后阶段接收消息队列循环中,调用的GetMessage函数参数提供错误
如:

while (GetMessage(&msg,hwnd, 0,
0))  
    {
   
   
TranslateMessage(&msg);
   
   
DispatchMessage(&msg);
    }

这个错误往往是由于程序员疏忽大意造成的,个别编译器使用时会有自动补全(提示)功能,会提示GetMessage函数的第二个参数是一个HWND型的参数,按照习惯,容易直接写成hwnd,这是不对的,一般情况下,第二个参数会置为空,即NULL;

2、消息循环本身出现逻辑错误
如:

while (TRUE)


  if(GetMessage (&msg, NULL, 0, 0))


if(msg.message==WM_QUIT) { break; }

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}
 }

while循环的判断部分始终为真,程序即使接受退出消息,也不会退出进程,这是逻辑错误,也是编程习惯的问题,一般建议直接将GetMessage函数的返回值作为条件语句放入while中,以减少错误。

所以,正确的写法应该写为:

while (GetMessage(&msg, NULL, 0, 0))
    {
   
   
TranslateMessage(&msg);
   
   
DispatchMessage(&msg);
    }
    return
&msg.wParam;

时间: 2024-12-15 06:22:37

windows编程中关于“关闭窗口无法退出进程”的解决方法的相关文章

win2003添加删除windows组件中无iis应用程序服务器项的解决方法

一.解决方法如下: 1.开始 -- 运行 ,输入c:\Windows\inf\sysoc.inf ,会打开这个文件; 找到 "[Components]" 这一段,在下面添加: " iis=iis.dll,OcEntry,iis.inf,,7 " .之后保存并关闭. 2.下载 iis6 安装包(附件下载), 解压到 D:/ 根目录下,方便使用; 3.开始 -- 运行 -- cmd ,打开命令行模式.执行下面两条命令: EXPand d:\IIS6\iis.dl_ c:

windows编程中的数据类型

在windows编程中,有许多奇怪的数据类型,初学者不知道这些代表什么,下面就把一些数据类型列出如下: ATOM 原子(原子表中的一个字符串的参考) BOOL 布尔变量 BOOLEAN 布尔变量 BYTE 字节(8位) CCHAR Windows字符 CHAR Windows字符 COLORREF 红.绿.蓝(RGB)彩色值(32位) Const 变量,该变量的值在执行期间保持为常量 CRITICAL_SECTION 临界段对象 CTRYID 国名标识符 DLGPROC 指向一个对话框过程的指针

Windows编程中char*转LPCWSTR解决办法总结

Windows编程中经常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题,于是自己总结了几种解决办法. 1.通过T2W转换宏 char* szStr = "balabala"; CString str = CString(szStr); USES_CONVERSION; LPCWSTR wszClassName = new WCHAR[str.GetLength()+1]; wcscpy((LPTSTR)wszClassName,T2W((LPTSTR)

Windows 编程中恼人的各种字符以及字符指针类型

在Windows编程中,很容易见到这些数据类型:LPSTR,LPTSTR,LPCTSTR... 像很多童鞋一样,当初在学Windows编程的时候,对着些数据类型真的是丈二和尚,摸不着头脑,长时间不用就会想不起来.所以,下面就对此做一个总结. 首先,先来看一下ASCII编码和UNICODE编码的区别.下面是<Windows 程序设计>一书中对Unicode编码的说明: 简单地说,Unicode扩展自ASCII字符集.在严格的ASCII中,每个字符用7位表示,或者计算机上普遍使用的每字符有8位宽:

Windows编程中char*转LPCWSTR解决的方法总结

Windows编程中常常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题.于是自己总结了几种解决的方法. 1.通过T2W转换宏 char* szStr = "balabala"; CString str = CString(szStr); USES_CONVERSION; LPCWSTR wszClassName = new WCHAR[str.GetLength()+1]; wcscpy((LPTSTR)wszClassName,T2W((LPTSTR

linux中某个端口拒绝远程主机连接原因及解决方法

linux中某个端口拒绝远程主机连接原因及解决方法 问题描述: 比如在本机telent到192.168.8.170 主机的9000 端口,被拒绝. [[email protected] log]$ telnet 192.168.8.170 9000 Trying 192.168.8.170... telnet: connect to address 192.168.8.170: Connection refused 原因:原因有两个 一个是被防火墙拦截 或者该端口的监听地址为本机(127.0.0

universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使用UIL遇到了这个问题,相信这个问题许多使用UIL的人都碰到过 现在把解决方法贴出来给有同样问题的朋友做参考 先看下UIL的工作流程 在已经允许内存,存储卡缓存的前提下,当一个图片被请求display时,首先要判断图片是否缓存在内存中,如果false则尝试从存储卡读取,如果依然不存在最后才从网络地址

Windows删除删除文件提示无法读源文件或磁盘解决方法

创建一份文本文档,写入以下二行代码: DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 保存后,把TXT改成BAT批处理格式 把要删的文件拖到这个批处理文件上,会自动运行并删除. Windows删除删除文件提示无法读源文件或磁盘解决方法,布布扣,bubuko.com

jQuery中ajax的使用与缓存问题的解决方法

jQuery中ajax的使用与缓存问题的解决方法 1:GET访问 浏览器 认为 是等幂的就是 一个相同的URL 只有一个结果[相同是指 整个URL字符串完全匹配]所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果 POST则 认为是一个 变动性 访问 (浏览器 认为 POST的提交 必定是 有改变的) 防止 GET 的 等幂 访问 就在URL后面加上 ?+new Date();,[总之就是使每次访问的URL字符串不一样的] 设计WEB页面的时候 也应该遵守这个