最近開發了一個程式,做了一個安裝程式。在解安裝時,如果程式在執行,還是會被解安裝,就想要讓系統發出訊息,要使用者先關掉程式再解安裝。上網找了很久,發現,只要利用classname去找到我的程式,就可以完成我要的動作,但是要怎麼去找到classname呢?
在MDI與Dialog二者之間的設定方式不同,這裡只做Dialog的說明。
參考:http://support.microsoft.com/kb/251059
第三跟第四點選一個作就可以,第三點是以圖形的方式說明,只要將紅圈的部份設為FALSE,就可以在你的Dialog的參數裡找到classname的欄位,就可以直接設定了。
- 開啟您的專案工作空間,其中包含對話方塊中,然後再按一下 [ ResourceView]
- 在 [資源編輯器] 中開啟的對話方塊。Properties. " _msthash="339302" _mstchunk="true">對話方塊中,以滑鼠右鍵按一下,然後選取屬性。注意類別名稱的項目,在右下角。如果您使用 Mfc 程式庫支援的資源檔,此編輯方塊會顯示停用狀態。Properties. " _msthash="848255" _mstchunk="true">若要啟用此選項,切換到 [資源] 檢視中,最上層節點,然後按一下滑鼠右鍵選取 [內容]。Enable MFC Features check box. " _msthash="1017906" _mstchunk="true">清除 [啟用 MFC 功能] 核取方塊。MFC Mode property to FALSE. " _msthash="1187557" _mstchunk="true">或是為了 Visual C++ 的.NET 中,取消選取[MFC 模式] 屬性設為 FALSE。現在顯示在對話方塊的內容。Class Name edit box should be enabled. " _msthash="1526859" _mstchunk="true">應該啟用 [類別名稱] 編輯方塊。輸入類別名稱。舉個例說是 MyPrivateClassName。
- 或者,將.rc 檔開啟成文字檔。前往您想要的對話方塊資源,新增 [類別] 選項。
IDD_LIMITDLGINSTANCE_DIALOG DIALOGEX 0, 0, 195, 44 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW CAPTION "LimitDlgInstance" CLASS "MyPrivateClassName" // Add your class name here! FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,138,7,50,14 PUSHBUTTON "Cancel",IDCANCEL,138,23,50,14 PUSHBUTTON "&Test!",IDC_BUTTON1,48,14,49,15 END
- InitInstance() 函式的 CWinApp 衍生類別中加入下列程式碼。
BOOL CLimitDlgInstanceApp::InitInstance() { / / WNDCLASS wc; // Get the info for this class. // #32770 is the default class name for dialogs boxes. ::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc); // Change the name of the class. wc.lpszClassName = "MyPrivateClassName"; // Register this class so that MFC can use it. AfxRegisterClass(&wc); / / // ... }
- 在上述步驟,在呼叫:: GetClassInfo(),請務必使用正確的 HINSTANCE 呼叫,如果您的對話方塊資源位於另一個 DLL 中。
- 建置並執行您的應用程式。使用 Spy + + 工具來驗證對話方塊現在會使用新的類別名稱。