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