VS2010 更改MFC標題及標題欄圖標和exe圖標


在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格式圖片制作

http://ico.55.la/

上面的網址可以將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,用來保存文檔模板指針,即文檔管理器負責管理文檔模板,而后者又用來管理文檔類、框架類和視類,一起為文檔服務。

 


免責聲明!

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



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