case WM_PRINT: // 此处阻止非客户区地绘制 return CallWindowProc( oldWndProc, hWnd, WM_PRINTCLIENT, wParam, lParam); //这里如何不return,而转向自绘非客户区
问题解决,添加了标红的代码,让上下级菜单重叠了6个像素: case WM_WINDOWPOSCHANGING: { // 最后,由于我们在MeasureItem里指定了菜单大小,而系统会自动替菜单加边框, // 因此必须去掉此部分额外地尺寸,将菜单大小改小 LPWINDOWPOS lpPos = (LPWINDOWPOS)lParam; if (lpPos->flags & SWP_NOSIZE){ if (lpPos->x) lpPos->x -= 6; } lpPos->cx -= 2 * GetSystemMetrics(SM_CXBORDER) + 4; lpPos->cy -= 2 * GetSystemMetrics(SM_CYBORDER) + 4; lResult = CallWindowProc(oldWndProc, hWnd, message, wParam, lParam); return 0; } 效果图:
在子菜单弹出后,能不能马上使用SetFocus之类的命令将焦点转到子菜单上?
class CMenu : public CObject
参考下高版本的 CMFCMenu 基于 CWnd 实现的, 想怎么绘制都可以
没有明白为什么没有非客户区会造成语言选择困难?当弹出下级菜单后,光标设置到语言选择菜单上,不可以吗?
15,978
社区成员
115,866
社区内容
加载中
试试用AI创作助手写篇文章吧