在VS2010下新建一個MFC的多文檔應用程序,程序默認的標題是“文檔名-工程名”。圖標默認的是寫着MFC的三個方塊。但在很多軟件中都不是使用的默認設置,開發者們都將標題和圖標改過,以符合項目要求,而且直觀好看。
一 修改標題
(一)基於MFC對話框
*對話框標題欄內容為靜態
MFC對話框型程序動態修改自身標題的方法有以下幾種:
1. 直接在資源視圖-Dialog-屬性-外觀的“Caption”中修改。
2. 最簡單的是用對話框類自身的類函數:
BOOL CMyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
......
SetWindowText("My Title");
return TRUE; // return TRUE unless you set the focus to a control
}
3. 其次還可以用API函數來完成:
::SetWindowText(m_hWnd, "My Title"); 或 ::SetWindowText(GetSafeHwnd(), "My Title");
m_hWnd 也是MFC對話框類的成員變量,可直接引用,GetSafeHwnd()的作用與其一樣。
*對話框標題欄內容為動態生成的
在對應對話框的初始化函數OnInitDialog()中添加以下代碼:
CString title; title.Format("%d",Id);//在標題欄動態顯示Id的值 this->SetWindowText(title);
(二)基於MFC單、多文檔
標題分為前后兩部分,前面一部分默認是文檔名,后面一部分默認是工程名,比如我新建一個叫做UITEST的工程,那標題就是“UITEST1-UITEST”。后面都用這個工程為例。
1.修改前半部分:
可以重載文檔類的虛函數SetTile,如下
void CTestDoc::SetTitle(LPCTSTR lpszTitle) { CDocument::SetTitle(L"你的標題"); }
也可以在UITESTDoc.app中,在BOOL CUITESTDoc::OnNewDocument()函數中添加SetTitle(L"你的標題")
2.修改后半部分:
改資源字符串
在資源視圖的String Table中找到IDR_MAINFRAME,將其標題改為你想要的標題
3.去掉-:
去掉標題中間的-,只顯示后面的標題,
方法1:通過重載CFramWnd類的OnUpdateFrameTitle函數
virtual void OnUpdateFrameTitle(BOOL NaDa); void CMainFrame.:OnUpdateFrameTitle(BOOL NaDa) { CString csAppName; csAppName.Format(AFX_IDS_APP_TITLE); SetWindowText(csAppName); }
此時顯示的結果只有字符串資源AFX_IDS_APP_TITLE所定義的字符串,當然也可以把SetWindowText(csAppName)中的csAppName換成你想要的標題字符串。
方法2:在CMainFrame的PreCreateWindow函數中修改窗口風格
BOOL CMainFrame.:PreCreateWindow(CREATESTRUCT& cs) { cs.style &= ~(LONG) FWS_ADDTOTITLE; return CFrameWnd::PreCreateWindow(cs); }
使用此方法,窗口的標題只顯示IDR_MAINFRAME字符串中第一個\n之前的部分
二 修改圖標
(一)VS2010程序文件夾下生成的exe文件圖標
創建一個新工程,可以什么都不加。打開.rc, 創建或打開Icon資源(以下都以Icon為例)。
單擊工程窗口的資源視圖標簽,選中資源ID為IDR_MAINFRAME圖標資源,然后按Delete鍵把它刪除掉,當然也可以不刪,具體后面會講到。
從資源菜單中選擇Resource,然后選擇Icon,添加資源,選中Icon類型,點擊導入,此時會叫你選擇本地的圖片,記住必須選擇.ioc格式的圖片,否則導入失敗。
把新圖標的資源ID改為IDI_ICON(也可以不改)。 具體做法如下:
有一點很重要,你改知道就是 打開Header Files下的Resource.h,找到Icon下的圖標,系統默認是從128開始的,
#define IDR_MAINFRAME 128
#define IDR_ICONTETYPE 129(單/多文檔程序的文檔圖標)
#define IDI_ICON1 130
#define IDI_ICON2 131
VS2010程序文件夾下生成的exe文件圖標是用Icon下幾個圖標中value值最小的,順序為IDR_MAINFRAME、IDR_ICONTETYPE、新加 的,所以想更改生成的exe文件圖標,只要保證圖標的value值是Icon下幾個圖標中最小的就可以了
(1)導入自己的.ioc圖片,並在Resource.h中,將自己加的icon資源Value改為最小,如下,因此不一定要刪除IDR_MAINFRAME
#define IDR_MAINFRAME 129
#define IDI_ICON1 128(自己添加的icon)
(2)然后編譯運行,找到你的debug目錄,你將看到圖標已經更改的.exe執行文件,這種方法可以將任何你喜歡的圖片做成.exe文件圖標
(二)修改運行程序標題欄圖標
1. 基於MFC對話框
(1)如上操作,導入自己喜愛的ico圖片,編輯新加icon的ID,比如我新加的Icon資源ID為 IDI_ICON1
(2)基於對話框的程序,在構造函數中有一句
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
此時把IDR_MAINFRAME改為我的IDI_ICON1的圖標名。
(3)編譯運行你看到自己喜愛的圖片出現在標題欄的位置了。
2. 基於MFC單、多文檔
替換默認的MFC圖標,先要自己畫一個符合格式要求的位圖或從外部導入一個圖標,修改其屬性名,假設為IDI_IDI1。在MainFrm的OnCreate()里添加如下代碼:
HICON m_hIcon; m_hIcon = AfxGetApp()->LoadIcon(IDI_IDI1); SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon
其中big icon是32×32,small icon是16×16
(三).ico格式圖片制作
上面的網址可以將jpg .jpeg .gif .png 轉換為.ioc 之后的操作你該會的!
整合以下幾篇文章:http://blog.csdn.net/link_/article/details/7261801
http://www.cnblogs.com/Romi/archive/2012/02/14/2351799.html
http://734507691.blog.163.com/blog/static/1164804662010112383027130/
http://blog.sina.com.cn/s/blog_6a1cdb3f0101hbsj.html
附:IDR_MAINFRAME字符串資源
聲明這個篇文章來自:http://hi.baidu.com/flyeagle88/blog/item/c1aa0c0e07862de037d1226c.html 感謝
打開程序資源文件(*.rc),展開“String Table”,找到ID為IDR_MAINFRAME的字符串資源,可看見它由“\n”字符分隔的7個字串,這可以從MFC生成向導第4步對話框上看到。對於IDR_MAINFRAME資源,可以利用CDocTemplate::GetDocString來獲取各個字串,也可以根據每個子串定義設置它:
值說明
CDocTemplate::windowTitle
主窗口標題欄上的字符串,僅在SDI程序出現,MDI程序將以IDR_MAINFRAME字符串為默認值。
CDocTemplate::docName
缺省文檔的名稱。缺省是無標題。
CDocTemplate::fileNewName
文檔類型的名稱。如果應用程序支持多種類型的文檔,此字符串將顯示在"File/New"對話框中。如果沒有指定,就不能夠在"File/New"對話框處理這種文件。
CDocTemplate::filterName
文檔類型的描述和一個適用於此類型的通配符過濾器。這個字符串將出現在“File/Open”對話框中的文件類型列表框中。要和CDocTemplate::filterExt一起使用。
CDocTemplate::filterExt
文檔的擴展名。如果沒有指定,就不能夠在“File/Open”對話框中處理這種文檔。要和CDocTemplate::filterName一起使用。
CDocTemplate::regFileTypeId
如果你以::RegisterShellFileTypes向系統的注冊表注冊文件類型,此值會出現在HKEY_CLASSES_ROOT之下成為其子項,並僅供Windows內部使用。如果沒有指定,這種文件類型就無法注冊。
CDocTemplate::regFileTypeName
這也是存儲在注冊表中的文件類型名稱。它會顯示於程序中用以訪問注冊表的對話框內。
因此,對於IDR_MAINFRAME資源標題(Caption)為:
Hello\nNo Name\nGraphic\nText Files(*.txt)\n.txt\nGraphic.Document\nGraphic.Document
來說,對應下圖:
【文件\新建】和【文件\打開】菜單項的命令響應函數都是CWinApp類提供的。CWinApp類有一個成員變量:m_pDocManager,它指向CDocManager對象的指針,即CWinApp負責管理文檔管理器,而后者有一個文檔模板指針鏈表:m_templateList,用來保存文檔模板指針,即文檔管理器負責管理文檔模板,而后者又用來管理文檔類、框架類和視類,一起為文檔服務。