计算机二级:VC应用程序之图标标题探究计算机二级考试

文章作者 100test 发表时间 2009:05:10 17:28:20
来源 100Test.Com百考试题网


  2009年下半年全国计算机等级考试你准备好了没?考计算机等级考试的朋友,2009年下半年全国计算机等级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库
  首先是 图标问题:
  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()第二个参数实现,其单位为毫秒。
  3.文档标题
  对于单文档窗体,编译运行应用程序,标题栏上显示"无标题-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.
  }

  特别推荐:

  2009年9月全国计算机等级考试时间及科目预告

  2009年上半年全国计算机等级考试参考答案请进入计算机考试论坛

  2009年全国计算机等级考试报名信息汇总

  2009年NCRE考试有新变化

  2009年全国计算机等级考试-大纲

  2009年上半年全国计算机二级考试试题及答案

  2009年上半年全国计算机等级考试试题答案汇总



相关文章


计算机二级:VisualC 剪贴板操作不完全攻略计算机二级考试
计算机二级:VC应用程序之图标标题探究计算机二级考试
MISRAC指导指南解读MISRAC规则101113)计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛