Visual Studio C++ MFC界面常用參數更改(改變圖標,添加控件,調試打印函數等等)


背景

需要使用Visual Studio C++做一些界面。此篇文章既是記錄Visual Studio C++在調整界面時常常遇見的問題。

正文

一、如何更改窗體圖標,以及生成的.exe圖標

  • 更改窗體圖標
    首先要有一個.ico的圖標文件,然后在解決方案管理器內找到資源文件,然后將想要更改的.ico圖標添加至該資源內,添加的類型為Icon。打開Recourse.h文件,該文件供界面文件.rc使用,如下所示:
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 wzCAN.rc 使用
//
#define IDM_ABOUTBOX                    0x0010
#define IDD_ABOUTBOX                    100
#define IDS_ABOUTBOX                    101
#define IDD_WZCAN_DIALOG                102
#define IDI_ICON1                       129    // 導入圖標時,MFC產生的對應宏
#define IDR_MAINFRAME                   128    // MFC默認圖標對應的宏
#define IDC_CHECK1                      1000

注意IDR_MAINFRAME這個宏定義,接着打開wzCANDlg.cpp文件,其中wzCAN為類名,找到如下函數:

CwzCANDlg::CwzCANDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CwzCANDlg::IDD, pParent)
{
        // 此段代碼既是加載窗體圖標
        // IDR_MAINFRAME即為默認的窗體顯示圖標文件
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
}

將IDR_MAINFRAME改成IDI_ICON1,類窗體顯示的既是導入的新圖標文件。

  • 更改生成的.exe文件的圖標
    經過上述步驟,類窗體圖標確實改變了,可是生成的.exe文件卻沒有改變。原因在於MFC總是默認將宏定義最小值所對應的圖標設為.exe圖標。在.rc文件內已經說明,如下所示:
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1               ICON                    'res\\Aplex.ico'
IDR_MAINFRAME           ICON                    'res\\wzCAN.ico'

因此,只需要將我們導入圖標所對應的宏定義值改成最小即可。

#define IDI_ICON1                       128    // 導入圖標時,MFC產生的對應宏
#define IDR_MAINFRAME                   129    // MFC默認圖標對應的宏

二、如何添加菜單欄,並實現相應菜單欄的命令響應

關於菜單欄的操作的更加詳細說明已經另外開了一篇博客Visual studio C++ MFC之Menu editor記錄。
菜單欄在Visual Studio C++工程中以資源文件存在,所以不要誤認為其為控件。以下分為實現菜單欄以及單擊菜單產生命令的的兩個步驟:

  1. 實現菜單

    • 創建Menu相關資源文件:在資源視圖對應的.rc文件內右擊添加資源,選擇Menu,將會生成Menu相關文件。
    • 編輯菜單欄,直接輸入即可,如下圖:
    • 在要顯示該菜單欄的Dialog的屬性里找到Menu,選擇新添加菜單欄的ID
    • 編譯運行后,則可看到菜單欄在窗口中顯示。效果如下圖:
  2. 設置點擊某一個菜單欄選項實現對應命令:

    • 在對應的菜單欄右擊選擇添加事件處理程序,如下圖:
    • 左邊一欄中的消息類型分為兩類,一類是Command,一類是UI命令,該命令和Command的不同在於,UI命令會增加傳遞一個UI指針的參數,使該函數內可對UI進行更改。
      右邊一欄中的類列表則是對應在哪個窗口類去實現這個命令,毫無疑問,在哪個Dialog實現則去那個窗口類實現對應的函數。
    • 正確選擇消息類型類列表后,則會在對應窗口類實現對應的函數,而我在里面實現了一個消息通知,代碼如下:
void CwzCANDlg::OnChyqAge()
{
    // TODO: 在此添加命令處理程序代碼
    MessageBox((LPCWSTR)L"AGE Error",NULL,MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2);
}

實現如下函數后,當點擊對應的菜單欄,則會彈出一個警告框。

  1. 至此即完成了菜單欄和相應菜單欄的命令響應。

三、調試打印函數TRACE(...)

在調試程序的時候,時常需要知道一些變量的值,又不願意將變量添加到監視窗口,此時就可以調用函數TRACE(...),它的使用和printf(...)函數基本一致,運行程序時進入調試模式,則該函數輸出的信息顯示在輸出窗口。

四、無法將成員變量添加到ID為IDC_STATIC的控件中解決辦法

添加了一個Static Text的控件,想在運行的時候更改這個文本框的內容,就需要添加變量,然后出現了無法添加的錯誤。
解決辦法既是將ID改成其他的ID即可以添加了。

更多問題,未完待續

參考鏈接:

記錄時間:2017-1-20
記錄地點:深圳WZ


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM