win32 SDK 菜单自绘的问题

wojiushi3344 2013-01-05 05:11:53
win32 SDK 如何自绘菜单的背景图片。我想用一张图片来替换系统默认的菜单背景,尝试了很多方法没有完成。在自绘的时候都是每一项菜单来一次消息,这样只能重绘每一项的内容,现在我想重绘菜单的整个背景,不知道该怎么写,有谁知道吗,知道的麻烦说一下,谢谢!!注意:背景是一张大的背景图片!!!
...全文
386 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfm688 2013-01-07
  • 打赏
  • 举报
回复
引用 5 楼 wojiushi3344 的回复:
如果是你这样的话,好像只能贴BMP的图片,我用了另外一种方法不知道怎么失败了。
不管什么图片,只要能画出来就能得到HBITMAP
引用 5 楼 wojiushi3344 的回复:
在GetDC 和ReleaseDC 之间不能正确绘制图片。难道还需要捕获菜单的消息处理过程,然后再ON_PAINT中来绘制
是的,必须要处理菜单的WM_PAINT或者菜单的父窗口的WM_DRAWITEM
wojiushi3344 2013-01-06
  • 打赏
  • 举报
回复
引用 3 楼 gfm688 的回复:
C/C++ code ? 12345 MENUINFO mi = {sizeof(MENUINFO)}; mi.fMask = MIM_BACKGROUND; mi.hbrBack = CreatePatternBrush(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1))); SetMenuInfo……
如果是你这样的话,好像只能贴BMP的图片,我用了另外一种方法不知道怎么失败了。
void MenuEx::DrawMenuBack()
{
	HWND hMenu =FindWindow(L"#32768",L"");

	_instance = (HINSTANCE)GetWindowLong(_hWnd, GWL_HINSTANCE);

	RECT menuRect;
	GetWindowRect(hMenu,&menuRect);

	HBITMAP bitmap = LoadBitmap(_instance,MAKEINTRESOURCE(IDB_MENU));

	HDC dc = GetDC(hMenu);


	HDC mdc = CreateCompatibleDC(dc);
	SelectObject(mdc,bitmap);

	BitBlt(dc,0,0,20,20,mdc,0,0,SRCCOPY);

	ReleaseDC(hMenu,mdc);

}
调试发现,能正确获取到菜单的窗口句柄,加载图片也是成功加载了的,不知道是什么地方出问题了。 在GetDC 和ReleaseDC 之间不能正确绘制图片。难道还需要捕获菜单的消息处理过程,然后再ON_PAINT中来绘制.
Eleven 2013-01-05
  • 打赏
  • 举报
回复
http://www.codeproject.com/Articles/1493/A-Powerfull-Ownerdraw-Menu 不过是MFC的
gfm688 2013-01-05
  • 打赏
  • 举报
回复

MENUINFO mi = {sizeof(MENUINFO)};
mi.fMask = MIM_BACKGROUND;
mi.hbrBack = CreatePatternBrush(LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)));
SetMenuInfo(hMenu, &mi);
wojiushi3344 2013-01-05
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
你把一个大图每个菜单项贴对于的那一部分,最后不就是一个完整的菜单背景图了
你这样是不是也太复杂了,难道就没有方法直接替换菜单的背景图片吗?
Eleven 2013-01-05
  • 打赏
  • 举报
回复
你把一个大图每个菜单项贴对于的那一部分,最后不就是一个完整的菜单背景图了

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧