发新话题
打印

[转载]VC应用程序之图标标题探究

[转载]VC应用程序之图标标题探究

信息来源:邪恶八进制信息安全团队(www.eviloctal.com
首先是 图标问题:
   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 default

        static 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\n\nTest\n\n\nTest.Document\nTest   Document   第一项内容,改为如下内容   
2009216\n\nTest\n\n\nTest.Document\nTest   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;   
}
select girl from Guilin where age='18-20' and bg='beautiful'--

TOP

发新话题