从Windows标题栏中删除图标而不放弃关闭按钮或者系统菜单?

时间:2020-03-05 18:39:25  来源:igfitidea点击:

我正在开发MFC应用程序,最近我一直在寻找一种从Windows标题栏中删除图标,但保留关闭按钮的好方法。两种明显的候选解决方案是关闭系统菜单样式或者使用工具窗口样式,但是我不希望不禁用系统菜单或者使用缩小的工具窗口标题栏。许多MFC应用程序都具有此功能,所以我想知道:我是否缺少执行此操作的标准方法?

解决方案

回答

删除系统菜单,然后再将其放回位置(例如关闭按钮等旁边),该怎么办?

回答

如果没有该图标,我可以想象用户访问系统菜单的唯一方法是右键单击标题栏。

如果我们正是如此,则可以在主机上处理WM_RBUTTONDOWN,然后计算是否在标题栏上单击鼠标右键。

int clickX = GET_X_LPARAM(lParam);
int clickY = GET_Y_LPARAM(lParam);

CRect frameRect;
mainFrame.GetWindowRect(&frameRect);

int titleBarHeight = GetSystemMetrics(SM_CYCAPTION);

if (clickX >= frameRect.left &&
    clickX <= frameRect.right &&
    clickY >= frameRect.top &&
    clickY <= frameRect.top + titleBarHeight)
{
   TrackPopupMenu(m_systemMenu);
}

回答

我们可以使用" WM_NCRBUTTONDOWN"来检测用户是否右键单击标题,然后调出系统菜单。

回答

设置WS_EX_DLGMODALFRAME扩展样式。