代码如下:首先主函数调用 CreateComboBox() 函数,创建组合框,并向它的窗口过程发送
SendMessage(m_hwndCom, CB_INSERTSTRING,0,(LPARAM)"ddd"); 就是添加一项,
ComboxWndProc 是组合框的窗口过程,
另一种方法是调用 ComboBox_SetCueBannerText(m_hwndCom, "ddd"); 但是没一点办法,
牛牛们看看~~~
void TControl::CreateComboBox()
{
m_hwndCom = CreateWindowEx(WS_EX_NOACTIVATE ,// 附加样式
WC_COMBOBOX, NULL, // 窗口类 // 窗口的标题
CBS_AUTOHSCROLL|CBS_DROPDOWNLIST|WS_BORDER|WS_CHILDWINDOW, // 窗口样式 :可见,子窗口,
10, 10, 100, 20,
TtheApp.hwndMain, // 父窗口句柄
(HMENU)NULL, TtheApp.hInstanceMain, NULL); // 没有菜单 // 应用程序实例 // 没有图标
ComboBox_SetCueBannerText(m_hwndCom, "ddd");
ShowWindow(m_hwndCom, SW_SHOWNORMAL); //显示
SendMessage(m_hwndCom, CB_INSERTSTRING,0,(LPARAM)"ddd");}LRESULT CALLBACK TControl::ComboxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if( message == CB_INSERTSTRING )
// Add ??? return CallWindowProc(TtheApp.theCon->ComOrigWndproc, hWnd, message, wParam, lParam);
}
SendMessage(m_hwndCom, CB_INSERTSTRING,0,(LPARAM)"ddd"); 就是添加一项,
ComboxWndProc 是组合框的窗口过程,
另一种方法是调用 ComboBox_SetCueBannerText(m_hwndCom, "ddd"); 但是没一点办法,
牛牛们看看~~~
void TControl::CreateComboBox()
{
m_hwndCom = CreateWindowEx(WS_EX_NOACTIVATE ,// 附加样式
WC_COMBOBOX, NULL, // 窗口类 // 窗口的标题
CBS_AUTOHSCROLL|CBS_DROPDOWNLIST|WS_BORDER|WS_CHILDWINDOW, // 窗口样式 :可见,子窗口,
10, 10, 100, 20,
TtheApp.hwndMain, // 父窗口句柄
(HMENU)NULL, TtheApp.hInstanceMain, NULL); // 没有菜单 // 应用程序实例 // 没有图标
ComboBox_SetCueBannerText(m_hwndCom, "ddd");
ShowWindow(m_hwndCom, SW_SHOWNORMAL); //显示
SendMessage(m_hwndCom, CB_INSERTSTRING,0,(LPARAM)"ddd");}LRESULT CALLBACK TControl::ComboxWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
if( message == CB_INSERTSTRING )
// Add ??? return CallWindowProc(TtheApp.theCon->ComOrigWndproc, hWnd, message, wParam, lParam);
}
HWND CreateCB(HWND parentWnd)
{
HWND hComboBox=0;
hComboBox = CreateWindow("COMBOBOX",
NULL,
WS_CHILD|WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST |CBS_SORT,
330, 20, 90, 140,
parentWnd, (HMENU)IDC_COMBOBOX,
(HINSTANCE) GetWindowLong(parentWnd, GWL_HINSTANCE),
NULL);
ShowWindow(hComboBox,SW_SHOW);
SendMessage(hComboBox,CB_ADDSTRING ,0,(LPARAM)"你好");
SendMessage(hComboBox,CB_ADDSTRING ,0,(LPARAM)"我好");
SendMessage(hComboBox,CB_ADDSTRING ,0,(LPARAM)"他好");
return hComboBox;
}
3K,这个可以实现, 用 CreateWindowEx 这么实现啊,在扩展样式里我都传入 0 了,还是不显示,用CreateWindow又以!
#define WS_EX_NOACTIVATE 0x08000000L
//
HWND WINAPI CreateComboEx(HWND parentWnd)
{
HWND hComboBoxEx;
INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_USEREX_CLASSES; InitCommonControlsEx(&icex); hComboBoxEx = CreateWindowEx(WS_EX_NOACTIVATE, WC_COMBOBOXEX, NULL,
WS_BORDER | WS_VISIBLE |
WS_CHILD | CBS_DROPDOWN,
330, // Vertical position of Combobox
20, // Horizontal position of Combobox
90, // Sets the width of Combobox
140, // Sets the height of Combobox
parentWnd, (HMENU)IDC_COMBOBOX,
(HINSTANCE) GetWindowLong(parentWnd, GWL_HINSTANCE),
NULL);
// use CBEM_INSERTITEM头insert
return hComboBoxEx;
}
怎么响应组合框的消息呢?比如选择组合框中的一项就响应该消息?具体怎么实现?
自己些的如下:响应的组合框控件消息,但控件里的具体项怎么区分啊,wParam,,lParam 每一个字段都试了一遍没用啊....
。
case WM_COMMAND: // 命令消息 char psz[20];
int w_l, w_h, l_l, l_h;
w_l = LOWORD(wParam);
w_h = HIWORD(wParam); // 高位 W 是消息事件
l_l = LOWORD(lParam);
l_h = HIWORD(lParam);
itoa(w_l, psz, 10); switch( w_h )
{
case CBN_SELCHANGE:
// MessageBox(hwnd, ("222"), ("消息"), MB_YESNO);
MessageBox(hwnd, (LPCSTR)psz, ("消息"), MB_YESNO);
break;
default:
return ::DefWindowProc(hwnd, msg, wParam, lParam);
}
break;
。。
hwndCtl = (HWND) lParam;
通过控件句柄传递。
判断如果是你的组合框句柄,则响应你的事件
假如你的组合框句柄是:hComboWnd
if(hComboWnd==(HWND) lParam)
switch(w_h)
{
case CBN_SELCHANGE:
// MessageBox(hwnd, ("222"), ("消息"), MB_YESNO);
MessageBox(hwnd, (LPCSTR)psz, ("消息"), MB_YESNO);
break;
default:
return ::DefWindowProc(hwnd, msg, wParam, lParam);
}
break;