MFC中屏蔽ESC和回车关闭对话框

解决方法是在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); }       » Read more

使用选择文件夹对话框

这是如何在VC下使用选择文件夹对话框,返回文件夹的地址的代码:CString BrowseDirectory( LPCTSTR title ) { char dir[MAX_PATH]; dir[0]='0';BROWSEINFO bi; bi.hwndOwner=NULL; bi.pidlRoot=NULL; bi.pszDisplayName=dir; bi.lpszTitle=title; bi.ulFlags=0; bi.lpfn=NULL; bi.lParam=NULL; bi.iImage=NULL;SHGetPathFromIDList(SHBrowseForFolder(&bi),dir); return dir; }       » Read more

Send Messages to Other Windows Using Win32 API

It 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 ) { char buf[1024]; GetWindowText( cwd, buf, 1024 ); cout << buf << endl; int id = GetDlgCtrlID( cwd ); cout << id << endl; cwd = GetNextWindow( cwd, GW_HWNDNEXT ); }// close the window SendMessage( wnd, WM_CLOSE, 0, 0 ); return 0; }        » Read more

禁止对话框关闭按钮和Alt+F4

在某些情况下我们需要防止用户单击窗口的标题栏中的关闭按钮关闭 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 ( ( nID & 0xFFF0 ) == SC_CLOSE ) { //if user clicked the "X" OnExit(); //---end of code you have added } else { CDialog::OnSysCommand( nID, lParam ); } }       » Read more

使用MFC在一对话框中嵌入另一对话框

全文介绍如何使用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        » Read more

一个非常优秀的MFC Grid控件

使用MFC进行开发, 界面编程占用了很大部分的时间. 像Grid这样的控件, MFC并没有提供支持. 发现了这样一个GridCtrl控件, 非常好用: http://www.codeproject.com/KB/miscctrl/gridctrl.aspx 要开发类似的程序时可以采用.        » Read more

How to Use MFC SetTimer

这是一个在MFC中使用Timer的示例: 1) 设定Timer In OnInitDialog(): UINT time_result = SetTimer(1, 50, 0);Timer的ID是1. 间隔是50ms. 2) 处理Timer事件 在OnTimer(UINT nIDEvent)函数中处理事件. 3) 程序退出时销毁设定的Timer. In OnDestroy(): KillTimer(1);        » Read more

MFC程序使用系统风格界面

VC6默认编译出来的程序在XP下Luma风格下运行也是Windows的经典界面, 有损界面的美观与统一. VC2008默认设置下如果不是使用的unicode也是如此. 本文给出使VC6和VC2008可以编译出使用系统界面风格的解决方案. 1. 使VC6编译出使用系统风格的程序 步骤如下: 1) 创建一个.manifest文件的资源. 在res/文件夹下创建一个跟以程序名加.manifest的文件, 如果程序为test.exe, 则创建test.exe.manifest 文件可由此下载: http://fclose.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' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'"") #elif defined _M_X64 #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'"") #else #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") #endif #endif 修改为如下即可: #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' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'"") #elif defined _M_X64 #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'"") #else #pragma comment(linker,"/manifestdependency:"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"") #endif Updated history 7 Mar. » Read more