- 浏览: 870994 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (341)
- Ajax (1)
- Asp.net (18)
- Java (5)
- Php (27)
- JavaScript (19)
- jQuery (12)
- 正则表达式 (4)
- SEO优化 (1)
- Windows 应用 (5)
- Flash (12)
- Asp (9)
- CSS (10)
- SQL Server (6)
- Flex (1)
- Ubuntu (0)
- mysql (34)
- PHP框架 (2)
- Apache (10)
- html (3)
- 网页切入 (1)
- Linux (33)
- vc++ (38)
- 友情链接 (0)
- firefox 插件 (4)
- SEO (1)
- Apache 压力测试 (1)
- imacros教程(一):imacros变量 (0)
- JS调用imacros所用到的函数 (0)
- imacros教程(三):调用csv文件 (1)
- imacros教程(二):JS调用imacros所用到的函数 (1)
- imacros 常用代码 (1)
- CSS最大宽度 (1)
- svn (1)
- WordPress (1)
- 网线的两种接法 (1)
- TP-LINK WR 系列无线路由器安全设置 (1)
- mysql talble is full ERR1114 (0)
- 解决mysql的内存表“table is full”错误 (1)
- linux 用户操作 (1)
- CentOS 挂载 ntfs 移动硬盘 (1)
- linux 储蓄设备操作 (1)
- Starting MySQL. ERROR! Manager of pid-file quit without updating file. (1)
- extmail 1.1 升级到 1.2 (1)
- extmail (0)
- emos (2)
- squid 3.0 (2)
- centos 6 minimal 安装 (1)
- linux实用命令详解 (1)
- win7 (1)
- php 字符串大小写转换 (1)
- 跟踪路由 tracert (1)
- css英文单词首字母添加样式 (1)
- jquery iframe 操作 (1)
- php 获取时间今天明天昨天时间戳 (1)
- php 上传限制 (1)
- ckeditor 配置 (1)
- flash 显示在 div 下 (1)
- flash + php 留言本乱码问题 (1)
- squid purge 出现 access denied 的解决方法 (1)
- delphi (1)
- 让delphi嵌入的WebBrowser无边框无滚动条 (1)
- delphi打开一个IE窗口 (1)
- delphi 获取鼠标当前位置的相对坐标 (1)
- delphi 获取可执行文件的当前路径 (1)
- delphi webbrowser 常用方法示例 (1)
- javascript 禁止鼠标右键... (1)
- delphi 播放gif 动画 (1)
- delphi弹出信息框大全 (1)
- Delphi中禁止WebBrowser右键的方法 (1)
- DELPHI 让程序只能运行一次 (1)
- Delphi XE2 破解补丁注册机下载使用教程 (1)
- Delphi RAD Studio XE2编译程序体积大的问题 (1)
- delphi 制作圆角窗口 (1)
- delphi 窗口 (1)
- delphi 窗体全透明,但窗体上的控件不透明 (1)
- delphi 窗口阴影 (1)
- delphi 获取任务栏高度 (1)
- delphi bsNone 之后任务栏右键无反应 (1)
- delphi 程序打开隐藏软件任务栏条 (0)
- delphi bsNone后的相关问题解决方法 (1)
- delphi bsNone 后显示边框 (1)
- delphi url编码操作 (1)
- delphi 调用exe文件 (1)
- delphi dll窗体的制作和调用 (1)
- delphi dll 调用窗体时的数据传递 (0)
- delphi 窗口显示在屏幕右下角 (1)
- 内网穿透&UDP打洞 (1)
- delphi idhttp post应用 (1)
- inno setup 开机启动 (1)
- inno setup 添加桌面快捷方式 (1)
- Delphi实现程序只运行一次并激活已打开的程序 (1)
- 解决 float point division by zero (1)
- Delphi 窗体显示在最前面,并获得焦点 (1)
- delphi 点击关闭按钮时隐藏窗口 (1)
- delphi 非客户区右键点击 (1)
- delphi真正可以截获WINDOWS关机消息的源码 (1)
- delphi utf8转码 (1)
最新评论
-
zj7243886:
非常感谢,这东西解决我的问题;谢谢你的分享
Linux 安装 jpeg-6b 错误 ./libtool 命令未找到 -
丶Sk.Mabon:
能让html也绕过吗。。机房限制很悲剧
绕过 <?PHP exit(’Access Denied’); ?> 限制 -
丶Sk.Mabon:
请教gzip.php 的写法。万分感谢!
apache 开启 gzip -
hyxj1220:
火狐中单纯的定义这样的样式,貌似不行,必须要让容器浮动
英文长文本换行CSS -
逆水寒龙:
太好了,正好用上,谢谢博主共享
Asp.net 将中文汉字转换成拼音首字和拼音全拼
从用户单击关闭按钮(标题栏最右边)或者用鼠标或鍵盘选择系统菜单的“关闭”选项,直到窗口消失,应用程序结束。这期间到底发生了什么呢?这曾经是我百思不得其解的问题,我想也会有很多人和我一样会碰到这个问题。所以我要把我的一些学习心得写出来,与大家共享:
1、首先会产生一个WM_SYSCOMMAND消息,如果程序员没有对此消息进行拦截,则由缺省的窗口函数DefWindowProc进行处理,如果表达式(LOWORD(wParam)&0xFFF0)==SC_CLOSE 成立,DefWindowProc发出一个WM_CLOSE消息。
2、同样,如果程序员没有对WM_CLOSE消息进行拦截,则还是由DefWindowProc进行处理,这次,她只简单的调用 DestroyWindow函数,DestroyWindow先把窗口破坏掉,使用户看不到窗口。但是窗口破坏后,应用程序并没有结束,于是 DestroyWindow再接再励,送出了一个WM_DESTROY消息。
3、这一次,WM_DESTROY被载获了,通常是会有这样的句子:
case WM_DESTROY:
PostQuitMessage(0);
...
这里PostQuitMessage函数很简单的发送一个WM_QUIT消息来响应WM_DESTROY
4、WM_QUIT消息非常特殊,她使GetMessage函数返回0,从而结束了消息循环,
应用程序从此结束。
下面我给出完整的证明程序,请大家一试:
#include <Windows.h>
#include <TCHAR.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="窗口";
char lpszTitle[]="窗口示例";
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc =WndProc;
wndclass.cbWndExtra=0;
wndclass.cbClsExtra =0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=lpszClassName;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hwnd=CreateWindow(lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(1)
{
GetMessage(&Msg,NULL,0,0);
if(Msg.message==WM_QUIT)
{
MessageBox(NULL,_T("收到WM_QUIT,即将跳出消息循环"),_T("注意了"),MB_OK);
break;
}
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MessageBox(NULL,_T("已经跳出消息循环,应用程序即将结束!"),_T("注意了"),MB_OK);
return Msg.wParam;
}
LRESULT CALLBACK WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
MessageBox(NULL,_T("收到WM_CLOSE消息,即将调用 DestroyWindow(hwnd);"),_T("注意了"),MB_OK);
DestroyWindow(hwnd);
break;
case WM_DESTROY:
MessageBox(NULL,_T("已调用过DestroyWindow(hwnd),看不到窗口了吧;"),_T("注意了"),MB_OK);
MessageBox(NULL,_T("以下处理WM_DESTROY"),_T("注意了"),MB_OK);
PostQuitMessage(0);
break;
case WM_SYSCOMMAND:
if((LOWORD(wParam)&0xFFF0)==SC_CLOSE)
{
MessageBox(NULL,_T("你关闭了窗口,即将发送WM_CLOSE消息!"),_T("注意了"),MB_OK);
SendMessage(hwnd,WM_CLOSE,0,0);
}
//不要添加 break,否则不能响应其它WM_SYSCOMMAND消息
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return(0);
}
--------------------------------------------------------------------------------
窗口破坏过程与Windows消息循环的补充,增加了对WM_NCDESTROY的处理
/**
* File Name : MessageTest.cpp
* Version : 1.1
* Project Name : MessageTest
* Project Type : Win32
* Author : netcoder
* Addition : 此版本增加了对WM_NCDESTROY的处理, 感谢 lily311 的补充
*/
#include <windows.h>
#include <tchar.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="窗口";
char lpszTitle[]="窗口示例";
wndclass.style=CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc =WndProc;
wndclass.cbWndExtra=0;
wndclass.cbClsExtra =0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH));
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=lpszClassName;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hwnd=CreateWindow(lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(1)
{
GetMessage(&Msg,NULL,0,0);
if(Msg.message==WM_QUIT)
{
MessageBox(NULL,_T("收到WM_QUIT,即将跳出消息循环"),_T("注意了"),MB_OK);
break;
}
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MessageBox(NULL,_T("已经跳出消息循环,应用程序即将结束!"),_T("注意了"),MB_OK);
return Msg.wParam;
}
LRESULT CALLBACK WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
MessageBox(NULL,_T("收到WM_CLOSE消息,即将调用 DestroyWindow(hwnd);"),_T("注意了"),MB_OK);
DestroyWindow(hwnd);
break;
case WM_DESTROY:
MessageBox(NULL,_T("已收到WM_DESTROY,看不到窗口了吧!"),_T("注意了"),MB_OK);
break;
case WM_NCDESTROY:
MessageBox(NULL,_T("收到WM_NCDESTROY!"),_T("注意了"),MB_OK);
PostQuitMessage(0);
break;
case WM_SYSCOMMAND:
if((LOWORD(wParam)&0xFFF0)==SC_CLOSE)
{
MessageBox(NULL,_T("你关闭了窗口,即将发送WM_CLOSE消息!"),_T("注意了"),MB_OK);
SendMessage(hwnd,WM_CLOSE,0,0);
}
//不要添加 break,否则不能响应其它WM_SYSCOMMAND消息
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return(0);
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/azhang00000/archive/2009/03/05/3961231.aspx
LRESULT CMyDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_CLOSE: MessageBox(_T("收到WM_CLOSE消息,即将调用 DestroyWindow(hwnd);"),_T("注意了"),MB_OK); DestroyWindow(); break; case WM_DESTROY: MessageBox(_T("已调用过DestroyWindow(hwnd),看不到窗口了吧;"),_T("注意了"),MB_OK); MessageBox(_T("以下处理WM_DESTROY"),_T("注意了"),MB_OK); PostQuitMessage(0); break; case WM_SYSCOMMAND: if((LOWORD(wParam)&0xFFF0) == SC_CLOSE) { MessageBox(_T("你关闭了窗口,即将发送WM_CLOSE消息!"),_T("注意了"),MB_OK); SendMessage(WM_CLOSE,0,0); } //不要添加 break,否则不能响应其它WM_SYSCOMMAND消息 } return CDialog::WindowProc(message, wParam, lParam); }
发表评论
-
VC获取系统时间、程序运行时间
2011-03-28 20:26 1561VC获取系统时间、程序运行时间关键词: VC 系统时间 1 ... -
MFC CListCtrl 获取行信息
2011-03-28 17:43 2583int nItem = m_list_friend- ... -
VC CListCtrl 图标不显示的问题
2011-03-28 14:41 2528VC CListCtrl 图标不显示的问题 1。没有将C ... -
CImageList 使用指南
2011-03-27 22:05 12891.综述在MFC中CImageList类封装了图像列表控件的功 ... -
CDialog::OnInitDialog() ----转
2011-03-27 20:13 2050BOOL CmapfileDlg::OnInitDialog( ... -
MFC 添加对话框背景图片
2011-03-27 17:09 9746先载入一张图片,ID为ID ... -
MFC 给对话框添加背景色
2011-03-27 16:54 21381. 重载OnCtlColor (CDC* pD ... -
MFC 画线的几种方式
2011-03-24 22:07 17889一.画鼠标按下到弹起之间的直线 1.创建 CView 的私 ... -
关于UNICODE下SKIN++的使用
2011-03-21 17:43 1533SKIN++使用起来应该说是比较方便的。但,官方说法,只有 ... -
判断控件是否已经被创建
2011-03-20 20:08 1341// Resize the edit control cont ... -
MFC 获取对话框控件
2011-03-20 19:49 1323CButton* btn = (CButton*)Get ... -
MFC 限制对话框,窗口大小
2011-03-20 19:08 54741.在类的头文件中加入函数申明 (.h文件) ... -
PROGRESS控件(CProgressCtrl类)
2011-03-20 17:41 3309CProgressCtrl *lpctrlPr = (CP ... -
mfc 关闭窗口
2011-03-20 15:28 1362退出程序用 AfxGetMainWnd()->SendM ... -
edit 设置enable
2011-03-20 13:42 15201. As you can disable other c ... -
mfc radio button 设置默认选中
2011-03-19 17:45 10981我们假设有两个RADIO控件:IDC_RADIO_SINGLE ... -
picture control 载入图片
2011-03-19 17:21 1289HBITMAP hBitmap; CStatic *pSt ... -
SysLink 用法
2011-03-19 13:35 1462SysLink SysLink.SetWindowText( ... -
VC++ UDP通信程序
2011-03-08 19:05 4030UDP的服务器端:(UdpSrv.cpp) ... -
MFC 调用dll
2011-03-04 20:47 3304typedef void (*lpFun)(void); ...
相关推荐
调协系统管理告警(Administrative Alert) 向用户发送系统管理消息 远程关闭一台Windows NT计算机 使用Windows NT系统属性对话框 Windows NT诊断程序(Diagnostic)简介 使用Windows NT诊断程序打印一份报告 在Windows ...
1002 窗口无法用来发送消息。 1003 无法完成此项功能。 1004 标志无效。 1005 卷不包含已识别的文件系统。请确认所有需要的文件系统驱动程序都已经加载,而且卷没有任何损坏。 1006 某文件的卷已...
(21) 如何获取有关窗口正在处理的当前消息的信息 17 (22) 如何在代码中获取工具条和状态条的指针 18 (23) 如何使能和禁止工具条的工具提示 18 (24) 如何创建一个不规则形状的窗口 19 (25) 如何获取应用...
20春学期《计算机应用基础》在线平时作业(2)-参考资料全文共6页,当前为第1页。20春学期《计算机应用基础》在线平时作业(2... A A 都具有破坏性 B 有些病毒无破坏性 C 都破坏EXE文件 D 不破坏数据,只破坏文件 17 在Wor
" "在Windows中,当程序因某种原因陷入死循环,下列哪一个方法能较好地 " "结束该程序( )。 " "按[Ctrl]+[Alt]+[Del]键,然后选择"结束任务"结束该程序的运 " "行 " "按[Ctrl]+[Del]键,然后选择"结束任务"结束...
而pDBFat是数据库的起始地址,如果pSysHead->dbf_count值异常过大,将导致pDBFat值超过最大内存地址值,随后进行的内存操作将导致内存操作越界错误,因而在测试过程中数据库破坏后就出现了主机死机的现象。...
第12章 通过Samba服务与Windows网络 集成 152 12.1 概述 152 12.2 快速解决方案 154 12.2.1 获取Samba的最新版本 154 12.2.2 检查是否已经安装了Samba 154 12.2.3 从Red Hat发行版本的CD-ROM 光盘上安装Samba软件包 ...
第12章 通过Samba服务与Windows网络 集成 152 12.1 概述 152 12.2 快速解决方案 154 12.2.1 获取Samba的最新版本 154 12.2.2 检查是否已经安装了Samba 154 12.2.3 从Red Hat发行版本的CD-ROM 光盘上安装Samba...
3.3 绘制窗口 3.3.1 绘制文本 3.3.2 绘制图元 3.3.3 使用画笔和画刷 3.4 开发Crop Circles示例 3.4.1 编写程序代码 3.4.2 测试完成的程序 3.5 小结 3.6 亲身实践 第4章 绘制图形图像 4.1 位图图像的...
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...
用途即为当该管理员是公司员工,那么可以把该管理员的IP添加为公司IP,那么该管理员到其它地方就无法登录后台,提高安全防止破坏。 (3)、编辑权限可以对各个管理员进行权限设置访问,可以分权。例如有些管理员...
1.增加窗口记忆功能,自动保存窗口大小、位置。 2.增加流控制设置自动装载功能。 AccessPort 1.26 (2005.07.08) 1.Terminal模式增加自动应答功能,支持Hex,Text,Float等类型。 2.修正部分bug。 AccessPort 1.25 ...