MFC修改标题

文章转载于MAOZHAOYANG的博客,在此表示感谢!

MFC程序的默认的标题是“无标题-title”,其中title是应用程序的名称,我们应如何修改MFC窗口标题来符合自己的要求?

    MFC程序的文档类中定义了一个虚函数SetTitle,用于设置窗口标题的前半部分,如果只是要修改“无标题”部分,可以重载文档类的该函数。窗口标题的后半部分可以通过SetWindowText设置,也可以编辑字符串资源中的IDR_MAINFRAME字符串,将第一个\n之前的字符串替换掉即可,而如果你想把“无标题”部分除掉,则必须修该窗口的风格。

一、修改前半部分

1) 可以重载文档类的虚函数SetTitle

void CTestDoc::SetTitle(LPCTSTR lpszTitle)

{

   CDocument::SetTitle(L"你的标题");

}

也可以在 CTestDoc::OnNewDocument()中添加SetTitle(L"你的标题");

二、修改后半部分

1) 修改资源字符串:

将资源文件中的IDR_MAINFRAME修改为

修改此处\n\nChange\n\n\nChangeTitle.Document\nChange Document

资源字符串中各子串的含义可以参考:IDR_MAINFRAME字符串资源中各子串的含义

2) 使用框架窗口类的SetWindowText(L"你的标题"):

在应用程序类CTestApp::InitInstance()中调用如下语句

m_pMainWnd->SetWindowText(L"你的标题");

或者在其他地方用AfxGetMainWnd()->SetWindowText(L"你的标题");

3) 如果您想除掉标题中间的“-”,

可以通过重CFramWnd类的OnUpdateFrameTitle函数,这个函数在VC提供的帮助文件中找不到,必须手工添加

virtual void OnUpdateFrameTitle(BOOL NaDa);

void CMainFrame.:OnUpdateFrameTitle(BOOL NaDa)

{

CString csAppName;

csAppName.Format(AFX_IDS_APP_TITLE);

SetWindowText(csAppName);

}

此时显示的结果只有字符串资源AFX_IDS_APP_TITLE所定义的字符串

4) 是在CMainFrame的PreCreateWindow函数中修改窗口风格:

BOOL CMainFrame.:PreCreateWindow(CREATESTRUCT& cs)

{

          cs.style. &= ~(LONG) FWS_ADDTOTITLE;

          return CFrameWnd::PreCreateWindow(cs);

}

使用此方法,窗口的标题只显示IDR_MAINFRAME字符串中第一个\n之前的部分

 

修改MFC标题栏上的图标

HICON m_hIcon;

在MainFrm的OnCreate()里

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

 

IDR_MAINFRAME字符串资源中各子串的含义

IDR_MAINFRAME字符串资源中包含7个子串,分别以\n结束,即如下格式:

<windowTitle>\n<docName>\n<fileNewName>\n<filterName>\n<filterExt>\n<regFileTypeId>\n<regFileTypeName>\n

(1)CDocTemplate::windowTitle,主窗口标题栏上的字符串,MDI程序不需要指定,将以IDR_MAINFRAME字符串为默认值。

(2)CDocTemplate::docName,缺省文档的名称。如果没有指定,缺省文档的名称是无标题。

(3)CDocTemplate::fileNewName,文档类型的名称。如果应用程序支持多种类型的文档,此字符串将显示在"File/New"对话框中。如果没有指定,就不能够在"File/New"对话框处理这种文件。

(4)CDocTemplate::filterName,文档类型的描述和一个适用于此类型的通配符过滤器。这个字符串将出现在“File/Open”对话框中的文件类型列表框中。要和CDocTemplate::filterExt一起使用。

(5)CDocTemplate::filterExt,文档的扩展名。如果没有指定,就不能够在“File/Open”

如何去掉“无标题”

1.

在主程序中的InitInstance():  
m_pMainWnd->SetWindowText("你要显示的东西如果不想显示置空就行")

 

2.

在框架类的PreCreateWindow函数里修改风格  
   
BOOL   CMainFrame::PreCreateWindow(CREATESTRUCT&   cs)  
 
   
cs.style   &=   ~FWS_ADDTOTITLE;   //去除标题条中的文档名  
return   CFrameWnd::PreCreateWindow(cs);  
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
修改MFC程序窗口的标题栏颜色,可以通过以下步骤实现: 1. 在你的 MFC 应用程序中打开资源编辑器,找到并双击你的对话框。 2. 在对话框的属性页中,找到 “Style” 属性,设置为 “Popup”。 3. 找到 “Caption” 属性,设置为你想要的标题文本。 4. 在对话框的属性页中,找到 “Background Color” 属性,选择你想要的颜色。 5. 在你的对话框的定义文件中,添加以下代码: ```cpp BOOL CYourDialog::OnInitDialog() { CDialog::OnInitDialog(); // 设置标题栏颜色 CWnd* pWnd = GetDlgItem(IDOK); // 获取窗口句柄 if (pWnd != NULL) { CRect rc; pWnd->GetWindowRect(&rc); // 获取窗口大小和位置 ScreenToClient(&rc); // 转换为当前窗口的客户区坐标 rc.bottom = rc.top + GetSystemMetrics(SM_CYCAPTION); // 计算标题栏的高度 CBrush brush(RGB(255, 0, 0)); // 创建画刷,设置为红色 CBrush* pOldBrush = (CBrush*)SelectObject(::GetDC(pWnd->GetSafeHwnd()), brush); // 选择画刷 PatBlt(::GetDC(pWnd->GetSafeHwnd()), rc.left, rc.top, rc.Width(), rc.Height(), PATCOPY); // 绘制矩形 SelectObject(::GetDC(pWnd->GetSafeHwnd()), pOldBrush); // 恢复原来的画刷 } return TRUE; } ``` 其中,IDOK 是你的对话框中任意一个控件的 ID,用于获取窗口句柄。你也可以使用其他控件的 ID。 6. 编译并运行你的 MFC 应用程序,查看效果。 注意:这种方法只适用于普通窗口,对于 MDI 窗口和对话框,需要使用其他方法实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值