현재 Windows 탐색기 셸 확장 프로그램을 작성하고 있습니다. 모든 것은 지금까지는 괜찮습니다. 그러나 컨텍스트 메뉴의 끝에서 MenuItemBitmaps를 사용하여 메뉴 항목을 삽입하는 데 문제가 있습니다. 이 코드는 내가 원하는 것을컨텍스트 메뉴의 끝 부분에 추가 한 항목에 비트 맵을 포함시키는 방법은 무엇입니까?
HRESULT CSimpleShlExt::QueryContextMenu(HMENU hmenu, UINT /*uMenuIndex*/, UINT uidFirstCmd, UINT /*uidLastCmd*/, UINT uFlags)
{
InsertMenu(hmenu, -1, MF_SEPARATOR, uidFirstCmd++, _T(""));
InsertMenu(hmenu, -1, MF_STRING | MF_BYPOSITION, uidFirstCmd++, _T("SimpleShlExt Test Item"));
InsertMenu(hmenu, -1, MF_STRING | MF_BYPOSITION, uidFirstCmd++, _T("SimpleShlExt Test Item 2"));
return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 3); // 3 because we do have three menu items!!!
}
: 여기
내가 비트 맵없이 사용되는 코드입니다. Windows 탐색기에서 마우스 오른쪽 버튼을 클릭하면 컨텍스트 메뉴의 끝에 구분 기호와 두 개의 메뉴 항목이 추가됩니다.HRESULT CSimpleShlExt::QueryContextMenu(HMENU hmenu, UINT uMenuIndex, UINT uidFirstCmd, UINT /*uidLastCmd*/, UINT uFlags)
{
// load the bitmap from the resource
HBITMAP hBitmap = (HBITMAP)LoadImage((HMODULE)_AtlBaseModule.m_hInst,
MAKEINTRESOURCE(IDB_BITMAP), IMAGE_BITMAP, 16, 16, 0);
InsertMenu(hmenu, uMenuIndex++, MF_SEPARATOR, uidFirstCmd++, _T(""));
InsertMenu(hmenu, uMenuIndex++, MF_STRING | MF_BYPOSITION, uidFirstCmd++, _T("SimpleShlExt Test Item"));
SetMenuItemBitmaps(hmenu, uMenuIndex - 1, MF_BITMAP | MF_BYPOSITION, hBitmap, hBitmap);
InsertMenu(hmenu, uMenuIndex++, MF_STRING | MF_BYPOSITION, uidFirstCmd++, _T("SimpleShlExt Test Item 2"));
SetMenuItemBitmaps(hmenu, uMenuIndex - 1, MF_BITMAP | MF_BYPOSITION, hBitmap, hBitmap);
return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 3); // 3 because we do have three menu items!!!
}
을하지만 지금은 메뉴 항목 끝에 어딘가에 상황에 맞는 메뉴의 중간에하지 배치 :
또한이 코드와이 메뉴 항목에 비트 맵을 추가 할 수 있습니다. 단순히 uMenuIndex
대신 -1
을 설정하면 작동하지 않습니다. 메뉴 항목은 실제로 끝 부분에 있지만 비트 맵은 표시되지 않습니다.
아이디어가 있으십니까?
일반적으로 항목을 배치 할 위치를 제어 할 수 없습니다. 코드보다 다른 항목을 추가하는 다른 컨텍스트 메뉴 확장이있을 수 있습니다. – Kerido