ComboBox_SetCurSel位于什么DLL?

时间:2012-10-05 06:46:33

标签: c# winapi pinvoke

我想在我的C#应用​​程序中使用WinApi函数ComboBox_SetCurSel

为此,我插入以下声明:

[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr ComboBox_SetCurSel(IntPtr hWnd, int index);

当我运行程序时,我收到错误

EntryPointNotFoundException ComboBox_SetCurSel user32.dll
  Message=Can't find entry point "ComboBox_SetCurSel" in DLL "user32.dll".

我认为此错误是由ComboBox_SetCurSel不在user32.dll中,而是在其他DLL中引起的。

如果这是正确的,要解决此错误,我需要更改DllImport声明。

问题:ComboBox_SetCurSel位于哪个DLL中?

3 个答案:

答案 0 :(得分:2)

这实际上不是一个功能。它是一个宏,来自WindowsX.h:

#define ComboBox_SetCurSel(hwndCtl, index)          ((int)(DWORD)SNDMSG((hwndCtl), CB_SETCURSEL, (WPARAM)(int)(index), 0L))

SNDMSG是SendMessage的地方。换句话说,你应该这样做:

[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);

SendMessage(hWnd, 0x14E, (Int32)index, 0);

答案 1 :(得分:2)

见:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb856484(v=vs.85).aspx

这是一个宏,而不是一个功能。

答案 2 :(得分:1)

ComboBox_SetCurSel是宏,你不能在C#中使用它。使用CB_SETCURSEL消息调用SendMessage API:http://msdn.microsoft.com/en-us/library/windows/desktop/bb775899%28v=vs.85%29.aspx

这是SendMessage API声明:http://www.pinvoke.net/default.aspx/user32/SendMessage.html