2问题:下面代码GWL_HINSTANCE是啥子东西?GetDialogBaseUnits为何返回0?

时间:2021-01-01 20:24:44
用SDK也很好创建按钮啊,先定义
static HWND hwndButton;
static int cxClient,cyClient,cxChar,cyChar;
WS_SIZE:
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);
cxChar=LOWORD(GetDialogBaseUnits());
cyChar=HIWORD(GetDialogBaseUnits());
return 0;
WM_CREATE:
hwndButton=CreateWindow("button","OK",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
cxChar, //相对窗口左边的位置
cyChar, //相对窗口上面的位置
cxChar*20,cyChar*4,//按钮大小
hwnd, //父窗口句柄
(HWND)IDC_BUTTON1,//按钮ID,可以在之前定义#define IDC_BUTTON1 100
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE));
return 0;
WM_COMMAND:
if(LOWORD(wParam)==IDC_BUTTON1)//这里根据按钮ID来判断是否点击,也可以根据句柄来判断
SendMessage(hwnd,WM_CLOSE,0,0);//点击按钮退出窗口
return 0;

6 个解决方案

#1


(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE));
获得当前进程实例句柄HINSTANCE
看一下MSDN不就清楚了

#2


那传的参数是什么

#3


该回复于2010-09-09 09:27:09被版主删除

#4


就是得到这个窗口的实例句柄,后面那个GWL_HINSTANCE是函数的第2个参数

#5


引用 4 楼 jack54877012 的回复:
就是得到这个窗口的实例句柄,后面那个GWL_HINSTANCE是函数的第2个参数

那第2个参数 是什么意思啊

#6


引用 5 楼 jyzdtn 的回复:
引用 4 楼 jack54877012 的回复:
就是得到这个窗口的实例句柄,后面那个GWL_HINSTANCE是函数的第2个参数

那第2个参数 是什么意思啊

就是为了得到窗口的实例句柄而设置的参数啊
下面是这个函数的说明,看看就明白了:
函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。 函数原型:LONG GetWindowLong(HWND hWnd,int nlndex);   
参数:   
hWnd:窗口句柄及间接给出的窗口所属的窗口类。   
nlndex:指定要检索的基于0的偏移量。有效值的范围从0到窗口额外内存空间的字节数,减去4。例如,若指定了12位或多于12位的窗体类的额外存储空间,则应设为第三个32位整数的索引位8(12- 4=8)。要获得任意其他值,指定下列值之一:   
GWL_EXSTYLE= (-20) 扩展窗口样式   
GWL_STYLE=(-16) 窗口样式   
GWL_WNDPROC= (-4) 该窗口的窗口函数的地址   
GWL_HINSTANCE= (-6) 拥有窗口的实例的句柄   
GWL_HWNDPARENT= (-8) 该窗口之父的句柄。不要用SetWindowWord来改变这个值   
GWL_ID= (-12) 对话框中一个子窗口的标识符   
GWL_USERDATA = (-21) 含义由应用程序规定   
DWL_DLGPROC = 4 这个窗口的对话框函数地址   
DWL_MSGRESULT = 0 在对话框函数中处理的一条消息返回的值   
DWL_USER = 8 含义由应用程序规定   
返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。若想获得更多错误信息请调用 GetLastError函数。 

另外一点,我觉得你这样遇到一个问题就来论坛上问多没效率,别人就算给你回答也是需要时间的啊,自己要学会利用身边的资源来学习,比如说你可以在MSDN里查到所有想要的信息,如果不会用MSDN或者觉得英文看着麻烦的话可以在GOOGLE或者BAIDU里直接搜索一个函数,就可以得到这个函数有关的信息.

#1


(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE));
获得当前进程实例句柄HINSTANCE
看一下MSDN不就清楚了

#2


那传的参数是什么

#3


该回复于2010-09-09 09:27:09被版主删除

#4


就是得到这个窗口的实例句柄,后面那个GWL_HINSTANCE是函数的第2个参数

#5


引用 4 楼 jack54877012 的回复:
就是得到这个窗口的实例句柄,后面那个GWL_HINSTANCE是函数的第2个参数

那第2个参数 是什么意思啊

#6


引用 5 楼 jyzdtn 的回复:
引用 4 楼 jack54877012 的回复:
就是得到这个窗口的实例句柄,后面那个GWL_HINSTANCE是函数的第2个参数

那第2个参数 是什么意思啊

就是为了得到窗口的实例句柄而设置的参数啊
下面是这个函数的说明,看看就明白了:
函数功能:该函数获得有关指定窗口的信息,函数也获得在额外窗口内存中指定偏移位地址的32位度整型值。 函数原型:LONG GetWindowLong(HWND hWnd,int nlndex);   
参数:   
hWnd:窗口句柄及间接给出的窗口所属的窗口类。   
nlndex:指定要检索的基于0的偏移量。有效值的范围从0到窗口额外内存空间的字节数,减去4。例如,若指定了12位或多于12位的窗体类的额外存储空间,则应设为第三个32位整数的索引位8(12- 4=8)。要获得任意其他值,指定下列值之一:   
GWL_EXSTYLE= (-20) 扩展窗口样式   
GWL_STYLE=(-16) 窗口样式   
GWL_WNDPROC= (-4) 该窗口的窗口函数的地址   
GWL_HINSTANCE= (-6) 拥有窗口的实例的句柄   
GWL_HWNDPARENT= (-8) 该窗口之父的句柄。不要用SetWindowWord来改变这个值   
GWL_ID= (-12) 对话框中一个子窗口的标识符   
GWL_USERDATA = (-21) 含义由应用程序规定   
DWL_DLGPROC = 4 这个窗口的对话框函数地址   
DWL_MSGRESULT = 0 在对话框函数中处理的一条消息返回的值   
DWL_USER = 8 含义由应用程序规定   
返回值:如果函数成功,返回值是所需的32位值;如果函数失败,返回值是0。若想获得更多错误信息请调用 GetLastError函数。 

另外一点,我觉得你这样遇到一个问题就来论坛上问多没效率,别人就算给你回答也是需要时间的啊,自己要学会利用身边的资源来学习,比如说你可以在MSDN里查到所有想要的信息,如果不会用MSDN或者觉得英文看着麻烦的话可以在GOOGLE或者BAIDU里直接搜索一个函数,就可以得到这个函数有关的信息.