zoukankan      html  css  js  c++  java
  • 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字符串中第一个 之前的部分

    二 修改图标

    (一)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的字符串资源,可看见它由“ ”字符分隔的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 No Name Graphic Text Files(*.txt) .txt Graphic.Document Graphic.Document

    来说,对应下图:

     

    【文件新建】和【文件打开】菜单项的命令响应函数都是CWinApp类提供的。CWinApp类有一个成员变量:m_pDocManager,它指向CDocManager对象的指针,即CWinApp负责管理文档管理器,而后者有一个文档模板指针链表:m_templateList,用来保存文档模板指针,即文档管理器负责管理文档模板,而后者又用来管理文档类、框架类和视类,一起为文档服务。

     

  • 相关阅读:
    ASP.NET MVC 重点教程一周年版 第二回 UrlRouting
    ASP.NET MVC 重点教程一周年版 第三回 Controller与View
    DynamicData for Asp.net Mvc留言本实例 下篇 更新
    Asp.net MVC视频教程 18 单选与复选框
    使用ASP.NET MVC Futures 中的异步Action
    ASP.NET MVC RC 升级要注意的几点
    ATL、MFC、WTL CString 的今生前世
    msvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
    关于Windows内存的一些参考文章
    Windows访问令牌相关使用方法
  • 原文地址:https://www.cnblogs.com/kimiway/p/3203924.html
Copyright © 2011-2022 走看看