创建菜单条 翻译:tellmenow
要创建菜单条,可以调用BOOL SHCreateMenuBar (SHMENUBARINFO *pmb);函数中唯一的参数是一个SHMENUBARINFO结构的的地址,该结构定义如下:
typedef struct tagSHMENUBARINFO {
DWORD cbSize;
HWND hwndParent;
DWORD dwFlags;
UINT nToolBarId;
HINSTANCE hInstRes;
int nBmpId;
int cBmpImages;
HWND hwndMB;
COLORREF clrBk;
}SHMENUBARINFO;
必须使用SHMENUBARINFO结构的尺寸来设置cbSize域。hwndParent设置为创建菜单条的窗口句柄。dwFlags则设置成三个标志的组合:
SHCMBF_EMPTYBAR 用来创建没有菜单的菜单条
SHCMBF_HIDDEN 创建一个菜单条,初始状态为隐藏
SHCMBF_HIDESIPBUTTON 创建一个菜单,其右边没有SIP按钮
SHCMBF_COLORBK 指出clrBk域中包含有效的颜色,在填充菜单条背景时使用。
SHCMBF_HMENU 指出资源是菜单资源,而不是菜单条资源
除非指定了SHCMBF_EMPTYBAR标志,否则你必须将nToolBarId域设置成描述菜单条中菜单和按钮结构的资源。除非使用了SHCMBF_HMENU标志,否则该资源并不是简单的菜单资源。该资源是一个普通资源数据快和菜单资源的组合,用来一起描述菜单条上的菜单以及按钮位置。我将在本节后面描述该资源。
接下来是hInstRes域,应该设置成包含菜单条资源的模块的实例句柄。随后的两个域,nBmpId和cBmpImages,描述了用于定义菜单条上按钮外观的位图图片。如果菜单条上有图形按钮,则可以将nBmpId设置成位图资源ID。该位图应该是16像素高,位图中的每个图片应该是16像素宽。所以如果位图中有三个图片,那么位图应该是48像素宽,16像素高。cBmpImages域设置成位图中图片的数量。为了更有艺术性,请参考最新的应用程序指导,看看如何将位图同其它部分搭配的更恰当。
如果菜单条创建成功,SHCReateMenuBar函数返回TRUE,这时候,hwndMB域中将包含菜单条句柄。您需要保存这个窗口句柄,因为一旦创建完成后,就没有其它方式可以确定菜单条句柄了。