当前位置: 技术问答>linux和unix
MINIGUI 对话框中无法加载图标??
来源: 互联网 发布时间:2016-04-16
本文导语: 对话框结构定义如下 typedef struct { DWORD dwStyle; // dialog box style DWORD dwExStyle; // dialog box extended style int x, y, w, h; // dialog box position const char* caption; ...
对话框结构定义如下
typedef struct
{
DWORD dwStyle; // dialog box style
DWORD dwExStyle; // dialog box extended style
int x, y, w, h; // dialog box position
const char* caption; // dialog box caption
HICON hIcon; // dialog box icon
HMENU hMenu; // dialog box menu
int controlnr; // number of controls
47
MiniGUI 编程指南 V2.0-4
PCTRLDATA controls; // poiter to control array
DWORD dwAddData; // addtional data, must be zero
} DLGTEMPLATE;
typedef DLGTEMPLATE* PDLGTEMPLATE;
但是我这样写的时候
static DLGTEMPLATE DlgFood=
{
WS_BORDER | WS_CAPTION ,
WS_EX_NONE,
100,100,304,255,
#ifdef _LANG_ZHCN
"请选择",
#else
"choose dish",
#endif
0,0,//把这一个0改成HICON的时候编译出错了。。。
7,NULL,
0
};
出现如下错误:
cdish.c:58: error: initializer element is not constant
cdish.c:58: error: (near initialization for ‘DlgFood.hIcon’)
为什么?
typedef struct
{
DWORD dwStyle; // dialog box style
DWORD dwExStyle; // dialog box extended style
int x, y, w, h; // dialog box position
const char* caption; // dialog box caption
HICON hIcon; // dialog box icon
HMENU hMenu; // dialog box menu
int controlnr; // number of controls
47
MiniGUI 编程指南 V2.0-4
PCTRLDATA controls; // poiter to control array
DWORD dwAddData; // addtional data, must be zero
} DLGTEMPLATE;
typedef DLGTEMPLATE* PDLGTEMPLATE;
但是我这样写的时候
static DLGTEMPLATE DlgFood=
{
WS_BORDER | WS_CAPTION ,
WS_EX_NONE,
100,100,304,255,
#ifdef _LANG_ZHCN
"请选择",
#else
"choose dish",
#endif
0,0,//把这一个0改成HICON的时候编译出错了。。。
7,NULL,
0
};
出现如下错误:
cdish.c:58: error: initializer element is not constant
cdish.c:58: error: (near initialization for ‘DlgFood.hIcon’)
为什么?
|
0,0,//把这一个0改成HICON的时候编译出错了。。。
此时把它改成HICON肯定是不行的:HICON是类型名,此处要的是一个HICON变量的值啊。
应该在生成并显示该对话框的函数中,在显示该对话框前,再为结构体的hIcon变量赋值。
如
void DlgFoodBox(HWND hWnd)
{
HICON hMyIcon = ......; // 加载Icon并得到句柄
DlgFood.controls = DlgFoodCtrls;
DlgFood.hIcon = hMyIcon; //事先得到的hMyIcon
DialogBoxIndirectParam (&DlgFood, hWnd, DlgFoodProc, 0);
}
此时把它改成HICON肯定是不行的:HICON是类型名,此处要的是一个HICON变量的值啊。
应该在生成并显示该对话框的函数中,在显示该对话框前,再为结构体的hIcon变量赋值。
如
void DlgFoodBox(HWND hWnd)
{
HICON hMyIcon = ......; // 加载Icon并得到句柄
DlgFood.controls = DlgFoodCtrls;
DlgFood.hIcon = hMyIcon; //事先得到的hMyIcon
DialogBoxIndirectParam (&DlgFood, hWnd, DlgFoodProc, 0);
}
|
......处可以调用
HICON GUIAPI LoadIconFromFile (HDC hdc, const char* filename, int which);
hdc 可以使用HDC_SCREEN
filename 指定图标文件名
which 指定文件中的第几个图标
HICON GUIAPI LoadIconFromFile (HDC hdc, const char* filename, int which);
hdc 可以使用HDC_SCREEN
filename 指定图标文件名
which 指定文件中的第几个图标