LoadIcon 可以用 LoadImage 替代

LoadIcon 可以用 LoadImage 替代

LoadIcon应用详解

The LoadIcon function loads the specified icon resource from the executable (.exe) file associated with an application instance.

Note  This function hase been superseded by the LoadImage function.

Syntax

HICON LoadIcon(      

    HINSTANCE hInstance,
    LPCTSTR lpIconName
);

LoadImage Function


Loads an icon, cursor, animated cursor, or bitmap.

Syntax

HANDLE LoadImage(      

    HINSTANCE hinst,
    LPCTSTR lpszName,
    UINT uType,
    int cxDesired,
    int cyDesired,
    UINT fuLoad
);
 
我也是vc新手者,但是经常碰到有人问涉及LoadIcon的应用办法,我就随便谈谈它(实际MSDN是最好的老师)
一.在SDK平台上,它的原 型是:
HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName);
1.参数说 明:
该参数从与hInstance模块有联系联的可执行文档中装入lpIconName指定的图标资源,仅当图标资源还没有被装入时该参数才执行 装入操作,否则只获取装入的资源句柄
2.参数parameter说明: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,它的第二个参数parameter是BOOL,假如是TRUE,就关闭了程式呈现的图标,就常说的快捷方法之类的图标;假 如是FALSE,那么就程式最大化,最小化或者正常呈现时的题目兰上的图标.

 

你可能感兴趣的:(VC++程序设计)