在VS2010下新建一個MFC的多文檔應用程序,,程序默認的標題是“文檔名-工程名”。圖標默認的是寫著MFC的三個方塊,。但在很多軟件中都不是使用的默認設置,,開發(fā)者們都將標題和圖標改過,以符合項目要求,,而且直觀好看,。 一 修改標題 (一)基于MFC對話框 *對話框標題欄內容為靜態(tài) MFC對話框型程序動態(tài)修改自身標題的方法有以下幾種: 1. 直接在資源視圖-Dialog-屬性-外觀的“Caption”中修改。 2. 最簡單的是用對話框類自身的類函數(shù): BOOL CMyDlg::OnInitDialog() ...... SetWindowText("My Title"); return TRUE; // return TRUE unless you set the focus to a control } 3. 其次還可以用API函數(shù)來完成: ::SetWindowText(m_hWnd, "My Title"); 或 ::SetWindowText(GetSafeHwnd(), "My Title"); m_hWnd 也是MFC對話框類的成員變量,,可直接引用,,GetSafeHwnd()的作用與其一樣。 *對話框標題欄內容為動態(tài)生成的 在對應對話框的初始化函數(shù)OnInitDialog()中添加以下代碼: CString title; title.Format("%d",Id);//在標題欄動態(tài)顯示Id的值this->SetWindowText(title); (二)基于MFC單,、多文檔 標題分為前后兩部分,,前面一部分默認是文檔名,后面一部分默認是工程名,,比如我新建一個叫做UITEST的工程,,那標題就是“UITEST1-UITEST”。后面都用這個工程為例,。 1.修改前半部分: 可以重載文檔類的虛函數(shù)SetTile,,如下 void CTestDoc::SetTitle(LPCTSTR lpszTitle) { CDocument::SetTitle(L"你的標題"); } 也可以在UITESTDoc.app中,在BOOL CUITESTDoc::OnNewDocument()函數(shù)中添加SetTitle(L"你的標題") 2.修改后半部分: 改資源字符串 在資源視圖的String Table中找到IDR_MAINFRAME,,將其標題改為你想要的標題 3.去掉-: 去掉標題中間的-,,只顯示后面的標題, 方法1:通過重載CFramWnd類的OnUpdateFrameTitle函數(shù) 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函數(shù)中修改窗口風格 BOOL CMainFrame.:PreCreateWindow(CREATESTRUCT& cs) { cs.style &= ~(LONG) FWS_ADDTOTITLE; return CFrameWnd::PreCreateWindow(cs); } 使用此方法,,窗口的標題只顯示IDR_MAINFRAME字符串中第一個\n之前的部分
二 修改圖標 (一)VS2010程序文件夾下生成的exe文件圖標 創(chuàng)建一個新工程,,可以什么都不加,。打開.rc, 創(chuàng)建或打開Icon資源(以下都以Icon為例),。 有一點很重要,你改知道就是 打開Header Files下的Resource.h,,找到Icon下的圖標,,系統(tǒng)默認是從128開始的, #define IDR_MAINFRAME 128 #define IDR_ICONTETYPE 129(單/多文檔程序的文檔圖標) #define IDI_ICON1 130 VS2010程序文件夾下生成的exe文件圖標是用Icon下幾個圖標中value值最小的,,順序為IDR_MAINFRAME,、IDR_ICONTETYPE、新加 的,,所以想更改生成的exe文件圖標,,只要保證圖標的value值是Icon下幾個圖標中最小的就可以了 (1)導入自己的.ioc圖片,并在Resource.h中,,將自己加的icon資源Value改為最小,,如下,因此不一定要刪除IDR_MAINFRAME #define IDR_MAINFRAME 129 (2)然后編譯運行,,找到你的debug目錄,,你將看到圖標已經(jīng)更改的.exe執(zhí)行文件,這種方法可以將任何你喜歡的圖片做成.exe文件圖標
(二)修改運行程序標題欄圖標 1. 基于MFC對話框 (1)如上操作,,導入自己喜愛的ico圖片,,編輯新加icon的ID,,比如我新加的Icon資源ID為 IDI_ICON1 (2)基于對話框的程序,,在構造函數(shù)中有一句 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 此時把IDR_MAINFRAME改為我的IDI_ICON1的圖標名,。 (3)編譯運行你看到自己喜愛的圖片出現(xiàn)在標題欄的位置了。
2. 基于MFC單,、多文檔 替換默認的MFC圖標,,先要自己畫一個符合格式要求的位圖或從外部導入一個圖標,修改其屬性名,,假設為IDI_IDI1,。在MainFrm的OnCreate()里添加如下代碼: HICON m_hIcon; m_hIcon = AfxGetApp()->LoadIcon(IDI_IDI1); SetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon 其中big icon是32×32,small icon是16×16
(三).ico格式圖片制作 上面的網(wǎng)址可以將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來獲取各個字串,,也可以根據(jù)每個子串定義設置它: 值說明 CDocTemplate::windowTitle 主窗口標題欄上的字符串,僅在SDI程序出現(xiàn),,MDI程序將以IDR_MAINFRAME字符串為默認值,。 CDocTemplate::docName 缺省文檔的名稱。缺省是無標題,。 CDocTemplate::fileNewName 文檔類型的名稱,。如果應用程序支持多種類型的文檔,此字符串將顯示在"File/New"對話框中,。如果沒有指定,,就不能夠在"File/New"對話框處理這種文件。 CDocTemplate::filterName 文檔類型的描述和一個適用于此類型的通配符過濾器,。這個字符串將出現(xiàn)在“File/Open”對話框中的文件類型列表框中,。要和CDocTemplate::filterExt一起使用。 CDocTemplate::filterExt 文檔的擴展名,。如果沒有指定,,就不能夠在“File/Open”對話框中處理這種文檔。要和CDocTemplate::filterName一起使用,。 CDocTemplate::regFileTypeId 如果你以::RegisterShellFileTypes向系統(tǒng)的注冊表注冊文件類型,,此值會出現(xiàn)在HKEY_CLASSES_ROOT之下成為其子項,并僅供Windows內部使用,。如果沒有指定,,這種文件類型就無法注冊,。 CDocTemplate::regFileTypeName 這也是存儲在注冊表中的文件類型名稱。它會顯示于程序中用以訪問注冊表的對話框內,。 因此,,對于IDR_MAINFRAME資源標題(Caption)為: Hello\nNo Name\nGraphic\nText Files(*.txt)\n.txt\nGraphic.Document\nGraphic.Document 來說,對應下圖:
【文件\新建】和【文件\打開】菜單項的命令響應函數(shù)都是CWinApp類提供的,。CWinApp類有一個成員變量:m_pDocManager,,它指向CDocManager對象的指針,即CWinApp負責管理文檔管理器,,而后者有一個文檔模板指針鏈表:m_templateList,,用來保存文檔模板指針,即文檔管理器負責管理文檔模板,,而后者又用來管理文檔類,、框架類和視類,一起為文檔服務,。
|
|