LoadIcon 可以用 LoadImage 替代

LoadIcon 可以用 LoadImage 替代

LoadIcon应用详解

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

NoteThis function hase been superseded by the LoadImage function.

Syntax

HICONLoadIcon(

HINSTANCEhInstance,
LPCTSTRlpIconName
);

LoadImage Function


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

Syntax

HANDLELoadImage(

HINSTANCEhinst,
LPCTSTRlpszName,
UINTuType,
intcxDesired,
intcyDesired,
UINTfuLoad
);
 
我也是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,那么就程式最大化,最小化或者正常呈现时的题目兰上的图标.

### VC6 对 GDI 的支持 Visual C++ 6.0 (VC6) 是微软于1998年发布的一款集成开发环境(IDE),主要用于C/C++程序的开发。尽管它是一个较老版本的工具,但它仍然广泛应用于遗留系统的维护和支持中[^1]。 GDI(Graphics Device Interface),即图形设备接口,是Windows操作系统提供的一套API集合,用于处理与显示相关的操作,例如绘制线条、矩形、椭圆以及位图等图像元素。通过调用这些API函数,开发者可以实现复杂的图形界面设计和交互功能[^2]。 在VC6环境中,完全可以通过包含必要的头文件并链接相应的库来利用GDI完成各种图形开发任务。具体来说,在基于MFC的应用框架下或者纯Win32 API项目里都可以轻松访问到GDI的功能集: #### 头文件与库设置 为了能够在VC6中的应用程序使用GDI特性,需确保包含了`windows.h`头文件,并正确配置了连接器选项以引入`gdi32.lib`静态库[^3]。 ```cpp #include <windows.h> #pragma comment(lib, "gdi32.lib") ``` 以上代码片段展示了如何准备一个简单的源码结构以便后续调用GDI相关服务。其中宏指令`#pragma comment(linker,...)`自动告知编译器附加指定的LIB档案至最终可执行档之中[^4]。 #### 示例:创建窗口并在其上绘图 下面给出一段示范性的例子说明怎样借助VC6配合GDI技术构建基本窗体应用的同时展示简单图案渲染过程。 ```cpp LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT ps; HDC hdc; switch(msg){ case WM_PAINT: hdc = BeginPaint(hwnd,&ps); Rectangle(hdc,50,50,150,150); // 绘制矩形框 EndPaint(hwnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,msg,wParam,lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){ static TCHAR szAppName[] = TEXT("MyApp"); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION) ; wndclass.hCursor = LoadCursor(NULL,IDC_ARROW) ; wndclass.hbrBackground = GetStockObject(WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; RegisterClass(&wndclass); hwnd = CreateWindow(szAppName, TEXT("GDI Example"), WS_OVERLAPPEDWINDOW , CW_USEDEFAULT ,CW_USEDEFAULT , CW_USEDEFAULT,CW_USEDEFAULT , NULL,NULL,hInstance,NULL ); ShowWindow(hwnd,iCmdShow ); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0)){ TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } ``` 此段完整的控制台工程演示了注册自定义类名建立新窗口的过程,并且当接收到重画消息时会触发回调函数内部逻辑从而呈现预设几何形状给用户查看[^5]。 综上所述,虽然VC6属于较为陈旧的技术平台之一,但是凭借内置良好的兼容性和丰富的文档资料积累,依然能够很好地满足运用GDI开展基础乃至高级别的图形编程需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值