VC应用程序之图标标题探究
首先是 图标问题:
1.改变应用程序图标:
A.把你的ico拷贝到res文件夹下,将Mytest.ico删掉,将自己的*.ico重命名为Mytest.ico,然后编译运行程序就可以看到产生的Mytest.exe的图标变样了,哈哈^&^.
B.代码的方法——将下面的代码段拷贝到CMytest.cpp下的BOOL CMytestApp::InitInstance(){...}
中的最后(在最后一个return true前面)
...
//向窗口发送WM_SETICON消息,可以改变窗口图标
//load icon resource
HICON hIcon;
hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);
ASSERT(hIcon);
//specify a new icon for windows
AfxGetMainWnd()->SendMessage(WM_SETICON,TRUE,(LPARAM)hIcon);
...
然后把你的*.ico拷贝到res文件夹下,在资源视图的Icon中把这个*.ico引入(在Icon上右键选择引入,找到这个图标就可以了,一般其ID是IDI_ICON1),再就是编译运行程序啦。
2.动态图标:
首先是和上面的1.B方法一样引入三个图标,(不知道怎么搞的,只能引入一个,另外两个自动成为Cursors下的元素了,没办法只能自己画两个图标了,其ID一般自动设为IDI_ICON1~IDI_ICON3)。
然后,编辑CmainFrame::OnCreate{...}方法,增加用来设指定时器的代码。在最后(在最后一个return 0之前)加上代码
...
SetTimer(1,500,NULL);
...
接着通过ClassWizard为CMainFrame增加下列消息处理函数(ctrl+W):void CMainFrame::OnTimer(UINT nIDEvent) 和 void CMainFrame::OnDestroy()
在CMainFrame::OnTimer方法中,修改程序来启动定时器的代码如下:
{
// TODO: Add your message handler code here and/or call defaultstatic int icons[]={IDI_ICON1,IDI_ICON2,IDI_ICON3};
static long index=0;
HICON hIconOld;
HICON hIconNew;
hIconNew=AfxGetApp()->LoadIcon(icons[index++%3]);
hIconOld=(HICON)GetClassLong(m_hWnd,GCL_HICON);
ASSERT(hIconNew);
ASSERT(hIconOld);
if(hIconNew!=hIconOld)
{
DestroyIcon(hIconOld);
SetClassLong(m_hWnd,GCL_HICON,(long)hIconNew);
RedrawWindow(NULL,NULL,RDW_FRAME|RDW_ERASE);
}
//CFrameWnd::OnTimer(nIDEvent);
}
用数组元素标识各图标,用AfxGetApp()->LoadIcon(…)取得下一帧图标的句柄,
用GetWindowLong(…)装载下一帧图标,否则卸掉上一帧图标,用SetClassLong(
…)装载下一帧图标,并重画主窗口。在CMainFrame::OnDestroy方法中,增加在主窗口撤销时中止定时器的代码。
{
CFrameWnd::OnDestroy();// TODO: Add your message handler code here
KillTimer(1);}
编译和运行应用程序可以看到三个图标循环显示的动画效果。该程序用了一个0.5s的定时器通知应用程序改变图标,所以显示速度为每秒
两帧图标,所以显示速度为每秒两帧图标。如想改变显示速度,可通过改变
SetTimer()第二个参数实现,其单位为毫秒。
2.文档标题
对于单文档窗体,编译运行应用程序,标题栏上显示"无标题-Mytest"
我们可以重载SetTitle函数来设置自己的文档标题,例如下面代码显示的结果为"ATest-Mytest"void CTestDoc::SetTitle(LPCTSTR lpszTitle)
{
lpszTitle="ATest";
CDocument::SetTitle(lpszTitle);
}如果要改变主窗口的标题,
第一种方法可以设置资源视图的String Table中的
Mytest Test Test.Document Test Document 第一项内容,改为如下内容
2009216 Test Test.Document Test Document。
最后主窗口将显示"ATest-2009216"第二种方法(zhe ge wo mei shi guo)可以在主窗口的PreCreateWindow函数中,设置CFrameWnd的保护
成员m_strTitle来更改
主窗口的标题BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if(!CFrameWnd::PreCreateWindow(cs))
return FALSE;
m_strTitle="2009216";
return TRUE;
}
补充:软件开发 , Vc ,