关于::SendMessage(hwnd, WM_CLOSE, 0, 0);

happywx825 2007-02-24 11:12:34
问一个很菜的问题
现在我想用::SendMessage(hwnd, WM_CLOSE, 0, 0);来关闭我打开的文件
但是如果文件有变更,那么将弹出对话框提示是否保存,现在我想无论我是否变更文件都不弹出对话框提示保存,直接不保存退出,应该怎么做?
...全文
495 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
做鸡真好吃 2007-02-28
  • 打赏
  • 举报
回复
mark~
jinxinsemems 2007-02-28
  • 打赏
  • 举报
回复
#define NOSAVE 1
::SendMessage(hwnd, WM_CLOSE, NOSAVE, 0);
在OnClose里判断wParam是不是NOSAVE决定是否弹出保存对话框
artcpp 2007-02-25
  • 打赏
  • 举报
回复
PostQuitMessage(0)
ToperRay 2007-02-24
  • 打赏
  • 举报
回复
::SendMessage(hwnd, WM_QUIT, 0, 0);

实验一下这个如何
edutl 2007-02-24
  • 打赏
  • 举报
回复
用PreTranslateMessage可以拦截消息
lonkil 2007-02-24
  • 打赏
  • 举报
回复
在你窗口的回调函数中或PreTranslateMessage中进行拦截

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CLOSE:
MessageBox.....;
}
}
}
双杯献酒 2007-02-24
  • 打赏
  • 举报
回复
先调用
CDocument::SetModifiedFlag(BOOL bModified)
比如
pDoc->SetModifiedFlag(FALSE);
YangAnShun 2007-02-24
  • 打赏
  • 举报
回复
用类向导映射WM_CLOSE消息
happywx825 2007-02-24
  • 打赏
  • 举报
回复
ToperRay(绿皮狼)
::SendMessage(hwnd, WM_QUIT, 0, 0);试了,不行
lonkil(www.vcfans.com)
怎么拦截,或者我自己写个消息可以吗?应该怎么写
lonkil 2007-02-24
  • 打赏
  • 举报
回复
拦截WM_CLOSE消息,进行判断!
Utility to Close Monitor or Enter Screen Saver v1.0.0.1 Release Date:2009 06 19 Program Name:UCMESS Author:Lawrence Don E-mail:LawrenceDon@163.com Support Web: lawrencedon.blog.hexun.com 下载地址:http://sites.google.com/site/downloadcenterforldsstudio/Home/UCMESS.rar?attredirects=0 UCMESSc.exe:直接双击该程序将关闭显示器,在CMD窗口中执行该程序时可以加参数cm或ss。 UCMESSc.exe cm 关闭屏幕; UCMESSc.exe ss 进入屏幕保护程序; 可以将CloseMonitor.cmd,EnterScreenSaver.cmd的快捷方式放到桌面,双击CloseMonitor.cmd将关闭显示器,双击EnterScreenSaver.cmd 将进入屏幕保护程序。 UCMESS.exe:直接双击该程序会跳出一窗口,点击"Close Monitor"按钮将关闭显示器,点击"Enter Screen Saver"按钮将进入屏幕保护程序。 文件MD5信息: File name MD5 value UCMESSc.exe 89c43352b6d5db291f810387dcaa5e55 UCMESS.exe 94f65e0a550d76971d1614bdd93cfffe CloseMonitor.cmd 6d7c807cb6291456d45dee7fa4390504 EnterScreenSaver.cmd 37343733f2ed02f05e2a69f201f19394 网上有一个名为CloseMonitor.exe的程序,我在2006年就用到它了,不过一直没关心它的实现原理是什么,最近又用到这个程序的时候,特地将其的 实现原理研究了一下,原来如此简单。 CloseMonitor.exe用的是SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2),这种写法可能导致程序没法结束并一直留在进程队列中, 因为The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified window and does not return until the window procedure has processed the message. 我用的方法是PostMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,1);PostMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2) 首先我用了PostMessage的方法,The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and returns without waiting for the thread to process the message. 该方法被调用之后会马上返回,从而不会 造成程序一直无法结束。另外我两次PostMessage最后的一个参数分别为1和2(1:the display is going to low power; 2:the display is being shut off) 这样基本可以保证大多数的屏幕是可以被关掉的。 另外我添加了一个新的功能:PostMessage(HWND_BROADCAST,WM_SYSCOMMAND, SC_SCREENSAVE, 0);即进入屏幕保护程序。 在UCMESS.exe中我用GetSafeHwnd()取代HWND_BROADCAST,这样可以避免有时关屏幕会出现开关好几次的问题。 针对这个程序的问题请访问我的博客lawrencedon.blog.hexun.com,给我留言,或回复我的文章:Utility to Close Monitor or Enter Screen Saver v1.0.0.1

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧