俺用CheckDlgButton这个API时总是提示找不到DLL入口,原以为是大小写问题,可是改来改去也不对。
俺把代码贴出来,希望各位老大赐教!!谢谢!
Private Declare Function CheckDlgButton Lib "user32.dll" Alias "CheckDLGButton" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As LongBWND = CheckDlgButton(SOFT_Handle, option_Handle, Checked)
俺把代码贴出来,希望各位老大赐教!!谢谢!
Private Declare Function CheckDlgButton Lib "user32.dll" Alias "CheckDLGButton" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As LongBWND = CheckDlgButton(SOFT_Handle, option_Handle, Checked)
Public Declare Function CheckDlgButton Lib "user32" Alias "CheckDLGButtonA" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long说明
该函数改变按钮控制的选中状态。返回值:
如果函数执行成功,返回值非零;如果函数失败,则返回值为零。若想获取更多错误信息,请调用 GetLastError函数。参数表:
hDlg:指向含有该按钮的对话框的句柄。
nlDButton:标识要修改的按钮。
uCheck:给定该按钮的选中状态。该参数可取下列值,这些值的含义如下:
BST_CHECKED:设置按钮状态为己选中(checked)。
BST_INDETERMINATE:设置按钮状态变灰,表示不确定状态。只有在该按钮具有BS_3STATE或BS_AUTO3STATE样式时才能使用该值。
BST_UNCHECKED:设置按钮为未选中状态(unchecked)。
CheckDlgButtonA是CheckDlgButton的别名,用来区分相同名字的API
的确有这个函数。俺晕!!
这样始终不行,但用下面这个就行了
Private Declare Function CheckDlgButton Lib "user32" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
有点不明白,为什么加上别名CheckDLGButtonA就不行,不知哪位高人能不能说说明白。
Private Declare Function CheckDlgButton Lib "user32" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
调用
BWND = CheckDlgButton(SOFT_Handle, option_Handle, Checked)
SOFT_Handle是软件句柄
option_Handle是控件句柄
checked没有定义。
但返回值就是为0,而软件句柄和控件句柄是绝对不会错的,不知是何原因。兄弟们帮帮忙呀!!!
Private Declare Function CheckDlgButton Lib "user32.dll" Alias "CheckDLGButtonA" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long
VB没有帮你把Alias "CheckDLGButtonA"去掉,这显然说明API函数声明的别名是区分大小写的。所以,如果把Alias "CheckDLGButtonA"改成Alias "CheckDlgButtonA",你的问题就解决了(这时候VB又会自动把它去掉,得到下面这个声明:Private Declare Function CheckDlgButton Lib "user32.dll" (ByVal hDlg As Long, ByVal nIDButton As Long, ByVal wCheck As Long) As Long;至于user32和user32.dll,这个VB都会自动识别,不必担心。)
CheckDlgButton
The CheckDlgButton function changes the check state of a button control.BOOL CheckDlgButton(
HWND hDlg, // handle to dialog box
int nIDButton, // button identifier
UINT uCheck // check state
);
Parameters
hDlg
[in] Handle to the dialog box that contains the button.
nIDButton
[in] Specifies the identifier of the button to modify.
uCheck
[in] Specifies the check state of the button. This parameter can be one of the following values.
BST_CHECKED Sets the button state to checked.
BST_INDETERMINATE Sets the button state to grayed, indicating an indeterminate state. Use this value only if the button has the BS_3STATE or BS_AUTO3STATE style.
BST_UNCHECKED Sets the button state to cleared 第二个参数nIDButton是int而非hwnd类型,所以这个参数绝对不应该是控件的句柄。下面说得很详细,这个参数是用来识别按钮的,说白了就是个序号。
后面给出的一个例子,其中涉及到这个函数的部分这么说:
CheckDlgButton(hwndDlg, ID_ABSREL, fRelative);
对于ID_ABSREL,MSDN中提及的只有ID_LINE, ID_ABSREL, IDOK, 和 IDCANCEL这四个值可以作为这个函数的第二个参数,其它没有更详细的内容,我也没有找到这(几)个常数在Vb中的声明,所以暂时帮不了你了。
CheckDlgButton 这个函数使用在对话框中的 第二个参数是 ID
如果你是用API 来创建对话框的 请使用 CheckDlgButton 如果你是用vb窗体请使用 SendMessage
VB 的窗体是个垃圾气得我要死。