基于对话框的单实例应用程序

来源:互联网 发布:知已的诗句 编辑:程序博客网 时间:2024/05/22 14:01

介绍

  有许许多多的文章介绍单示例应用程序的实现,这里演示一种非常简单的基于MFC对话框的应用程序,本技术可以运用到ATL/WTL和普通的win32应用程序。

实现

创建一个基于对话框的MFC工程。

打开资源文件(.rc),找到主窗口的模板,并添加一句话。把这个窗口类注册为SINGLE_INSTANCE_APP。

IDD_SINGLEINSTANCE_DIALOG DIALOGEX 0, 0, 320, 200STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENUEXSTYLE WS_EX_APPWINDOWCLASS "SINGLE_INSTANCE_APP"CAPTION "Single Instance Application"FONT 8, "MS Shell Dlg", 0, 0, 0x1BEGIN    DEFPUSHBUTTON   "OK",IDOK,263,7,50,16    PUSHBUTTON      "Cancel",IDCANCEL,263,25,50,16    CTEXT           "TODO: Place dialog controls here.",IDC_STATIC,10,96,300,8END


然后在InitInstance()函数起始位置加入如下代码:

//register window class nameWNDCLASS wc = {0};wc.style = CS_BYTEALIGNWINDOW|CS_SAVEBITS|CS_DBLCLKS;wc.lpfnWndProc  = DefDlgProc;wc.cbWndExtra  = DLGWINDOWEXTRA;wc.hInstance = m_hInstance;wc.hIcon = LoadIcon(IDR_MAINFRAME);wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);wc.hbrBackground = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));wc.lpszClassName = _T("SINGLE_INSTANCE_APP"); //this name is from dialog's templateATOM cls = RegisterClass(&wc);//check if our program is running alreadyCWnd* pWnd = CWnd::FindWindow(_T("SINGLE_INSTANCE_APP"), NULL);if (pWnd){pWnd->ShowWindow(SW_SHOW);pWnd->SetForegroundWindow();return FALSE;}


OK,测试一下吧!