大发时时彩作弊:vc修改标题栏的名称和图标(1)(转载)

来源:百度文库 编辑:中财网 时间:2024/04/29 06:53:50
vc修改标题栏的名称和图标 1 单文档接口(SDI)典型窗口标题的改变

用VC的AppWizard创建一个名为"Exam“的单文档类型的工程。开始运行时,程序主窗口标题形式如下:

Untitled-Exam

其中"Untitied"为文档标题,"Exam"为主窗口标题。当用"File-Open ” 打开"my.exm"文裆以后,文档标题变为"my.exm"。

所以程序主窗口标题栏的一般形式为:

文档标题—主窗口标题

1.1 文档标题的改变

文档标题是由工程中相应的文档类所控制的,所以就可在相应的文档类中,利用SetTitle()函数来改变文档标题。

例:改变CExamDoc::onNewDocument()函数为:

BOOL CExamDoc::OnNewDocument()

{

if(!CDocument::OnNewDocument())

return FALSE;

SetTitle("文档标题");

return TRUE;

}

运行程序,则每次选择选单中的"文件"的"新建"选项时,标题就变成"文档标题-Exam ”

1.2 主窗口标题的改变

主窗口的标题默认是工程的文件名,改变主窗口的标题方法有两种:

第一种方法:利用ResourceView打开工程的资源,修改String Table中的IDR_MAINFRAME的值。将原来的"Exam\n\nExam\nEXMFile(*.exm)\n.exm\nExam.Document\nExam Document"改为"标题改变示例\n\nExam\nEXM File(*.exm)\n.exm\nExam.Document\nExam Document"。这样改变后,主窗口标题就变为"-标题改变示例"。

第二种方法:具体改变方法如下:

改变 CMainFrame的成员函数PreCreateWindowO为:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT&  cs)

{

m_strTitle="MyTitle" ;

return CFrameWnd::PreCreateWindow(cs);

}

这样改变后,主窗口标题的形式就为"-MyTitle"。

M_strTile是CFrameWnd的保护成员(要得到m_strTile更详细的信息,查\msdev\mfc\include\afxwin.h文件)。CMainFrame是CFrameWnd类的派生类。

在这两种改变方法中,第二种方法优先级高,也就是说,改变了m_strTitle的值后,IDR_MAlNFRAME的值就不起作用。

1.3去掉文档标题,只保留主窗口标题

windows窗口的表现形式由PreCreateWindow函数的CREATESTRUCT结构类型参数cs.style决定,其中由FWS_ADDTOTITLE类型决定是否将文档标题加到窗口标题上的。所以,根据需要我们可以去掉文档标题,只保留主窗口标题,方法是:

在MainFrm.cpp文件中的PreCreateWindow中添加下面这句话

cs.style  &=~FWS_ADDTOTITLE;

其中,“~”是按位取反运算符,它将FWS_ADDTOTITLE的值按位取反后,再和cs.style 值按位取与,结果是将cs.style 值中的FWS_ADDTOTITLE标志位清0.

同样的,如果要去掉标题栏的其他一些特征,也可以用类似上面取反再与的方式。

1.4 适当使用SetWindowText设置窗口标题

SetWindowText是用来设定一些特定窗口的窗口标题的,如列表框,编辑框等,具体可查看msdn中的详细介绍,当然也可以用来设主窗口的窗口标题,在应用程序的APP文件中的InitInstance函数中添加下面一句话:

m_pMainWnd->SetWindowText("MyTtile");

这样窗口标题就只剩下类似主窗口标题的样子了。

但本人认为还是遵循“应该用什么做就用什么做”原则,编程要规范。

2 对多文挡接口(MDI)类型窗口标题的改变

在MDI类型窗口中,主窗口标题和文档标题的次序,和SDl类型窗口中次序是不同的。结合具体例子说明,用VC的AppWizard创建一个名为"MDITitle"的多文挡类型的工程。创建完工程后,编译运行该工程,主窗口标题形式如下:"主窗口标题-文档标题"。

2.l 文挡标题的改变

MDI类型窗口的文档标题也是由相应的文档类控制的。改变方法同SDI类型窗口类似,要改变标题,只要在相应的文档类中利用SetTitle()函数来改变文档标题。

2.2 主窗口标题的改变

MDI类型主窗口标题的改变方法同SDI类型窗口类似。改变主窗口标题也有两种方法,通过改变IDR_MAINFRAME或m_strTitle的值就可实现改变主窗口标题的目的。同样,改变了m_strTitle值后,IDR_MAINFRAME的值就不起作用。

2.3 子窗口标题的改变

在默认情况下,MFC自动将子窗口标题设为该子窗口所打开的文档标题。但实际上,子窗口标题与该子窗口标题所打开的文档标题可以不一样。可做如下改动:

利用ResourceView打开资源,修改String Table中的IDR_MAINFRAME的值为"MyTitle",使得主窗口标题变成"MyTitle"。

并将BOOL CMDlTitleDoc::OnNewDocument()函数改为:

BOOL CMDlTitleDoc::OnNewDocument()

{

if(!CDocument::OnNewDocument())

return FALSE;

static int count=0;

char message[10];

wsprintf(message,"%s%d","文档",count);

SetTitle(message);

count++;

return TRUE;

}

通过以上修改,主窗口标题栏被设置为:文档标题为"上海市卢湾区业余大学-文挡0"、"MyTitle-文档1 ” ……

一下针对子窗口标题的修改作如下改动:

将CChildFrame::PrecreateWindow()函数改为:

BOOL CChiidFrame::PrecreateWindow(CREATESTRUCT&cs)

cs.style &=~(LONG)FWS_ADDTOTlTLE;

return CMDIChildWnd::PrecreateWindow(cs);

}

要改变窗口类型, 这步工作必须做。常量问FWS_ADDTOTITLE是在文件\msdev\mfc\include\afxwin.h中定义。

在 CMDlTitleView类中增加OnlnitialUpdate()函数:

void CMDlTitleView::OnlnitiaiUpdate()

{

CView::OninitialUpdate();

Getparent()-〉SetWindowText(GetDocument()-)GetTitle()+ ” -MyTitle ” );

}

这样,子窗口的标题栏的形式就为"文档名-MyTitle"。

3、更改图标

3.1自己制作一个图标,命名与原来默认的ico图标相同的名称,放到res文件夹里的,替代它,就可以了,运行后就会发现标题图片已变成自己设计的图片了。
        3.2在Resources-Icon-IDR_MAINFRAME上右击-属性-文件名改为res\程序名.ico。