添加了HBMPITEM后,程序甚至无法加载下拉菜单。有什么想法如何在菜单中添加小位图?已从代码中删除项目以清理此问题。
逐步浏览程序表明,位图变量的内存中没有任何内容,这对我来说意味着它无法加载。路径正确。
更新:答案请参见下文。
MENUITEMINFO mii;
memset(&mii, 0, sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_BITMAP; //| MIIM_BITMAP;
mii.fType = MFT_BITMAP;
mii.dwTypeData = const_cast<char*>(pMenuRec->GetName());
mii.cch = strlen(pMenuRec->GetName());
mii.wID = pMenuRec->GetID();
mii.hbmpItem = image; // hBMP; // need to add bitmap handle
mii.dwItemData = reinterpret_cast<unsigned long>(pMenuRec->GetName());
InsertMenuItem(hMenu, pMenuRec->GetID(), FALSE, &mii);
memset(&mii,0,sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE | MIIM_DATA | MIIM_ID; //| MIIM_BITMAP;
mii.fType = MFT_STRING;
mii.dwTypeData = const_cast<char*>(pMenuRec->GetName());
mii.cch = strlen(pMenuRec->GetName());
mii.wID = pMenuRec->GetID();
//mii.hbmpItem = image; // hBMP; // need to add bitmap handle
mii.dwItemData = reinterpret_cast<unsigned long>(pMenuRec->GetName());
InsertMenuItem(hMenu,pMenuRec->GetID(),FALSE,&mii);
使"C:mybitmap.bmp"
的简单错误应为"C:\mybitmap.bmp"
。记住BackSlash是字符串文字中的一个逃生字符。如果您想要字符串中的后斜线,则必须将其加倍。
还值得注意的是,大多数功能与窗户上的前向斜线非常有效。因此您可以将后斜线更改为前向斜线。
偶然在您的代码中,为什么要加载位图两次?
因此不允许图像和文本。因此,通过添加fmask
使用了检查和未选中 memset(&mii,0,sizeof(mii));
mii.cbSize = sizeof(mii);
mii.fMask = MIIM_TYPE | MIIM_SUBMENU | MIIM_DATA | MIIM_ID | MIIM_CHECKMARKS; // Add checkmarks;
mii.fType = MFT_STRING;
mii.dwTypeData = const_cast<char*>(pMenuRec->GetName());
mii.cch = strlen(pMenuRec->GetName());
mii.wID = pMenuRec->GetID();
mii.hbmpChecked = image;
mii.hbmpUnchecked = image;
mii.dwItemData = reinterpret_cast<unsigned long>(pMenuRec->GetName());
InsertMenuItem(hMenu, pMenuRec->GetID(), FALSE, &mii);`