当前位置:编程学习 > wap >>

SHMENUBARINFO结构中的hwndParent和hInstRes成员问题

SHMENUBARINFO结构如下:
typedef struct tagSHMENUBARINFO {
  DWORD cbSize;
  HWND hwndParent;
  DWORD dwFlags;
  UINT nToolBarId;
  HINSTANCE hInstRes;
  int nBmpId;
  int cBmpImages;
  HWND hwndMB;
  COLORREF clrBk;
} SHMENUBARINFO, *PSHMENUBARINFO;

在MSDN的解释中:
hwndParent是指Handle to the window to control the command bar window.
hInstRes是指Instance handle that controls the resources. 
 
我想请问:
1,“the window to control the command bar window.”中的window究竟是指那一个窗口? 如何获得它的句柄呢?
2,“Instance handle that controls the resources.”中的Instance handle究竟是指那一个实例句柄? 如何获得这个句柄呢?

谢谢。
--------------------编程问答-------------------- 1. 你菜单属于哪个窗口,这个HANDLE就是哪个窗口的HANDLE,指定后,点击菜单会向该查发COMMAND消息

2. Instance handle指的是菜单资源所在的DLL或者EXE的Instance handle --------------------编程问答-------------------- 谢谢yzx0023(无聊客),

现在我开发的是Smartphone2003程序,这里的菜单实际上就是一个Soft Key bar, 而我想让它属于的窗口是一个对话框.

我的这个Soft Key bar在资源文件(.rc2)中是这样定义的:
IDR_MENU1 RCDATA
BEGIN
    0,
    2,
    I_IMAGENONE, IDM_MENU_OK, TBSTATE_ENABLED, 
        TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_MENU_OK, 0, 
        NOMENU,
    
    I_IMAGENONE, IDM_MENU_CANCEL, TBSTATE_ENABLED, 
       TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE, IDS_MENU_CANCEL, 0, 
       NOMENU,
END

而这个对话框的窗口名是:testDialog

所以我对SHMENUBARINFO结构中的hwndParent和hInstRes成员作了如下赋值:

BOOL rb;
int rc;
LRESULT lr;
SHMENUBARINFO mbi;

memset(&mbi, 0, sizeof(SHMENUBARINFO));  // Reset mbi to 0.
mbi.cbSize = sizeof(SHMENUBARINFO);

mbi.hwndParent = (HWND)FindWindow(NULL,_T("testDialog"));// Soft key bar's owner.
mbi.nToolBarId = IDR_MENU1;  // Soft key bar resource.
mbi.hInstRes = AfxFindResourceHandle(IDR_MENU1, RT_RCDATA);// HINST in which resource is located.

但是当我如下调用SHCreateMenuBar函数时:

rb = SHCreateMenuBar(&mbi);// Create the Soft key bar.
if (rb == FALSE)  // SHCreateMenuBar failed.
{
    rc = MessageBox( _T("Could not create soft key bar."));
    if (rc == 0)  // Not enough memory to create MessageBox.
        return E_OUTOFMEMORY;
    return E_FAIL;  // Replace with specific error handling.
}

程序总是不成功,并返回"Could not create soft key bar."这句话。

难道是下面这俩句柄取错了吗?
mbi.hwndParent = (HWND)FindWindow(NULL,_T("testDialog"));
mbi.hInstRes = AfxFindResourceHandle(IDR_MENU1, RT_RCDATA);

请帮我看一下吧,谢谢。
补充:移动开发 ,  Windows Phone
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,