解决方法是在CDialog::PreTranslateMessage() 的重载函数中将ESC和回车按键的消息处理掉. 直接上代码: BOOL CResultCollectorDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_KEYDOWN) { switch(pMsg->wParam) { case VK_RETURN: //回车 return TRUE; case VK_ESCAPE: //ESC return TRUE; } } return CDialog::PreTranslateMessage(pMsg); }
Tag: MFC
Win32 Programming: Operation on Files
Posted onHere, we show some example code on Win32. The code are operations on file on Win32 OSes. The code here uses some MFC classes. Recursively show the files from a path: void Show(const char *folderPath) { CFileFind finder; CString path(folderPath); path += “*.*”; BOOL bWorking = finder.FindFile(path); while (bWorking) { bWorking = finder.FindNextFile(); cout <<
Read more
Send Messages to Other Windows Using Win32 API
Posted onIt is simple for basic use. Just the example code. It is clear enough. int SendMsgToOtherWindow( ) { // find window by name HWND wnd = FindWindow( 0, “计算器” ); if ( wnd == 0 ) return 0; // print the child window text HWND cwd = GetWindow( wnd, GW_CHILD ); while ( cwd )
Read more
禁止对话框关闭按钮和Alt+F4
Posted on在某些情况下我们需要防止用户单击窗口的标题栏中的关闭按钮关闭 MFC 应用程序。可以删除窗口的WS_SYSMENU 样式, 但是,这样最大化最小化和还原按钮也被删除,并且无法添加。 这是Windows的设计依据。 可以通过禁用关闭按钮来模拟没有关闭按钮的窗口。 在 WM_CREATE 消息处理程序中禁用关闭按钮。使用下面的代码: CMenu *pSysMenu = GetSystemMenu(FALSE); ASSERT(pSysMenu != NULL); VERIFY(pSysMenu->RemoveMenu(SC_CLOSE, MF_BYCOMMAND)); 这样删除之后关闭按钮变为灰色,用户无法点击。但是使用Alt+F4仍然可以关闭程序。要将此功能也禁用需要重载CDialog的OnSysCommand方法。代码如下: void MyDlg::OnSysCommand( UINT nID, LPARAM lParam ) { if ( ( nID & 0xFFF0 ) == IDM_ABOUTBOX ) { CAboutDlg dlgAbout; //if you have an about dialog dlgAbout.DoModal(); } //add the following code else if
Read more
使用MFC在一对话框中嵌入另一对话框
Posted on全文介绍如何使用MFC在一对话框中嵌入另一对话框. 代码如下: static MyInDlg inDlg; // 需嵌入的对话框 inDlg.Create( IDD_DIALOG, AfxGetApp()->m_pMainWnd); CRect rc; // 嵌入对话框在原对话框中的位置 //GetClientRect(&rc); rc.left = 150; rc.top = 0; rc.bottom = 200; rc.right = 350; inDlg.MoveWindow( rc ); // 设置位置 inDlg.ShowWindow( SW_SHOW ); // 将对话框显示出来 对嵌入对话框设置如下: Style: Child Border: none
一个非常优秀的MFC Grid控件
Posted on使用MFC进行开发, 界面编程占用了很大部分的时间. 像Grid这样的控件, MFC并没有提供支持. 发现了这样一个GridCtrl控件, 非常好用: http://www.codeproject.com/KB/miscctrl/gridctrl.aspx 要开发类似的程序时可以采用.
MFC程序使用系统风格界面
Posted onVC6默认编译出来的程序在XP下Luma风格下运行也是Windows的经典界面, 有损界面的美观与统一. VC2008默认设置下如果不是使用的unicode也是如此. 本文给出使VC6和VC2008可以编译出使用系统界面风格的解决方案. 1. 使VC6编译出使用系统风格的程序 步骤如下: 1) 创建一个.manifest文件的资源. 在res/文件夹下创建一个跟以程序名加.manifest的文件, 如果程序为test.exe, 则创建test.exe.manifest 文件可由此下载: https://www.systutorials.com/t/g/programming/resultcollector.manifest/ 注意要使用utf-8编码保存。 2) 将新定义的资源加入到.rc2文件中, 类型设为24. 打开res/文件夹下的.rc2文件, 在其中加入如下定义: 1 24 MOVEABLE PURE “res/test.exe.manifest” 其中的文件地址按1)步中修改的设置即可. 之后编译即可, 为了使程序界面可能充分利用系统的界面特性, 可以将界面字体设置为TrueType类型的, 利用Windows XP等系统的屏幕字体平滑特性. 2. 使VC2008编译出使用系统风格的程序 在VC2008下就比较简单了, 如果程序字符集使用unicode则默认就是使用系统界面风格的, 如果选择其它的类型, 则编辑下stdafx.h即可. 最后面部分找到这么一段: #ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,”/manifestdependency:”type=’win32′ name=’Microsoft.Windows.Common-Controls’ version=’6.0.0.0′ processorArchitecture=’x86′ publicKeyToken=’6595b64144ccf1df’ language=’*'””) #elif defined _M_IA64 #pragma comment(linker,”/manifestdependency:”type=’win32′
Read more