Win32的程序,没有用MFC。用AppendMenu在Menu中加了一项
::AppendMenu(hMenu, MF_OWNERDRAW, IDM_NOTIFYICON_SEARCH, NULL);下面是消息处理函数:
void OnMeasureItem(LPMEASUREITEMSTRUCT lpMis)
{
lpMis->itemHeight = 20;
lpMis->itemWidth = 240;
}void OnDrawItem(LPDRAWITEMSTRUCT lpDis)
{
        HWND hSearchBox = ::CreateWindow(_T("COMBOBOX"), NULL,
WS_BORDER | WS_CHILD | WS_VISIBLE,
lpDis->rcItem.left,
lpDis->rcItem.top,
lpDis->rcItem.right - lpDis->rcItem.left,
lpDis->rcItem.bottom - lpDis->rcItem.top,
lpDis->hwndItem,
NULL, NULL, NULL);
}在OnDrawItem中ComboBox创建失败,GetLastError 1400。“Invalid window handle.”
好像直接在Menu上创控件是不行的。大家有什么办法吗?

解决方案 »

  1.   

    你在OnDrawItem里面创建的话,那岂不是没画一次你就得创建一个了?
    我感觉这样不好,你可以在其他地方创建,然后隐藏起来,在OnDrawItem里面再把他们显示出来。
    另外,检查一下CreateWindow里面的父窗口那个参数是否有效。
    再次,你试试把窗口样式设置为Popup的看看。
      

  2.   

    这个OnDrawItem是处理WM_DRAWITEM消息的,不是WM_PAINT。
      

  3.   

    在menu上加combobox??这个有点。。
      

  4.   

    LPDRAWITEMSTRUCT的结构成员对于不同的WM_DRAWITEM消息有不同的定义,你仔细看看。另外,WM_DRAWITEM消息和WM_PAINT消息有点类似,不是只触发一次的,楼上eleek的说法不无道理。
      

  5.   

    eleek和Mackz说的对,WM_DRAWITEM不只触发一次。我的CreateWindow放的位置不对。@Mackz:
    这个Menu是我用CreatePopupMenu创建的。
    DRAWITEMSTRUCT的结构我仔细看过了,hwndItem在这里就是我创建的Menu,值也是一样的。我现在把CreatWindow放在我创建Menu的代码之后,hParent用我所创建Menu的HANDLE,还是不行。GetLastError还是1400好像Menu不是一个Window?大家有办法吗?