zoukankan      html  css  js  c++  java
  • 加载图标

    HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName);
      1.函数说明:
      该函数从与hInstance模块相关联的可执行文件中装入lpIconName指定的图标资源,仅当图标资源还没有被装入时该函数才执行装入操作,否则只获取装入的资源句柄
      2.参数说明:lpIconName是指向NULL字符结尾的字符串的指针,它包含图标名.如果要使用windows预定义的图标,这是hInstance必须设置成NULL,lpIconName则可以是下列值:
      IDI_APPLICATION:32512 IDI_QUESTION:332514
      IDI_HAND:32513 IDI_EXCLAMATION:32515
      IDI_ASTERISK :32516 IDI_WINLOGO:32517
      可以用下面这个对话框来浏览图标
      void CMyDlg::OnButton1()
      {
      // TODO: Add your control notification handler code here
      static int i=0;
      m_static1.ModifyStyle(0,SS_ICON);//m_static1是一个静态文本的关联变量
      m_static1.SetIcon(::LoadIcon(NULL,(LPCTSTR)(32512+i)));
      i++;
      if(i>=6)
      i=0;
      }
      注意上面要用强制转换.
      在MFC中:
      在CWinApp中封装有该成员函数,有2种:
      HICON LoadIcon( LPCTSTR lpszResourceName ) const;
      HICON LoadIcon( UINT nIDResource ) const;
      所以如果添加了资源,ID 为IDI_ICON1,调用时直接:
      AfxGetApp()->LoadIcon(IDI_ICON1);
      但是这种方法并不能加载系统预定义图标,在CWinApp中还有个装载图标的函数:
      HICON LoadStandardIcon( LPCTSTR lpszIconName ) const;
      如:
      AfxGetApp()->LoadStandardIcon(IDI_QUESTION);
      MFC与SDK的联系
      当然在MFC中可以调用全局函数来加载图标,但是如果要装载自己添加的图标资源,要注意下面几种写法:
      ::LoadIcon(AfxGetApp()->m_hInstance,(LPCTSTR)IDI_ICON1);
      ::LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(ICON1));
      ::LoadIcon(AfxGetInstanceHandle(),,MAKEINTRESOURCE(ICON1));
      以上都是正确的.由于添加的图标资源ID不是字符型的(在resource.h,所以要转换:
      考试大提示: 在前面加上LPCTSTR强制转换
      用MAKEINTRESOURCE转换
      它的定义如下:
      #define MAKEINTRESOURCE(i) (LPCTSTR)((DWORD)((WORD)(i))),它的作用就是将资源标识转换为名称字符串
      用向导生成的对话框的图标是在哪里添加的?
      BOOL CMyDlg::OnInitDialog()
      {
      CDialog::OnInitDialog();
      // Add "About..." menu item to system menu.
      // IDM_ABOUTBOX must be in the system command range.
      ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
      ASSERT(IDM_ABOUTBOX < 0xF000);
      CMenu* pSysMenu = GetSystemMenu(FALSE);
      if (pSysMenu != NULL)
      {
      CString strAboutMenu;
      strAboutMenu.LoadString(IDS_ABOUTBOX);
      if (!strAboutMenu.IsEmpty())
      {
      pSysMenu->AppendMenu(MF_SEPARATOR);
      pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
      }
      }
      SetIcon(m_hIcon, TRUE);
      SetIcon(m_hIcon,FALSE);
      }
      那么m_hIcon在哪儿定义的呢?
      class CMyDlg : public CDialog
      {
      ....
      protected:
      HICON m_hIcon;
      }
      考试大提示: 那么m_hIcon在哪儿加载的呢?
      CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
      : CDialog(CMyDlg::IDD, pParent)
      {
      //{{AFX_DATA_INIT(CMyDlg)
      // NOTE: the ClassWizard will add member initialization here
      //}}AFX_DATA_INIT
      // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
      m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
      }
      其中IDR_MAINFRAME在资源下面可以找到.
      因此如果想更改图标的话,可以自己改写m_hIcon,或者在OninitDialog中写:
      SetIcon(::LoadIcon(NULL,IDI_APPLICATION),FALSE);
      SetIcon(::LoadIcon(NULL,IDI_APPLICATION),TRUE);
      考试大提示: SetIcon,它的第二个参数是BOOL,如果是TRUE,就是关闭了程序显示的图标,就是常说的快捷方式之类的图标;如果是FALSE,那么就是程序最大化,最小化或者正常显示时的标题兰上的图标. 来源:233网校-计算机二级考试

  • 相关阅读:
    170815、redis3.0安装配置
    170814、Java使用gzip压缩文件、还原文件
    170811、Java获取jdk系统环境变量
    170810、spring+springmvc+Interceptor+jwt+redis实现sso单点登录
    加密概述
    软件测试入门第02天:基础理论知识
    软件测试入门第01天:综述
    【心路历程】永远热泪盈眶
    Linux部署Django:报错 nohup: ignoring input and appending output to ‘nohup.out’
    【WEB】jQuery 判断复选框是否选中
  • 原文地址:https://www.cnblogs.com/xzh1993/p/6950109.html
Copyright © 2011-2022 走看看