最小化按钮不会出现在MFC对话框上

时间:2019-12-28 01:53:43

标签: c++ mfc

我无法在我的MFC对话框应用程序中添加最小化按钮。我已启用最小化框(true)。

最小化按钮出现在设计器视图中,但是当我运行该应用程序时,这些按钮不可见。

其他设置为: 样式:重叠
应用程序窗口:True
边框:对话框框
工具窗口:错误
系统菜单:True

我尝试添加:      ModifyStyle(0,WS_MINIMIZEBOX,TRUE);

OnInitDialog(),但尚未解决。

我可以选择3种样式:弹出式,子式和重叠式。如果使用弹出窗口,则看不到标题栏,也无法拖动窗口。如果我使用该样式,则Child会引发访问冲突,因此我可以选择的唯一样式是重叠的,该样式显示标题栏,并允许我拖动窗口,但最小化按钮不可见。

我正在使用Visual Studio 2019并运行Windows 10 1809。

我已仔细检查并将最小化框设置为TRUE,但运行时它仍不会显示在对话框中。

问题是当我使用弹出窗口样式时,根本看不到标题栏!另外,如果我使用弹出样式,则无法拖动窗口(标题栏丢失)。重叠是我唯一可以使用的样式。

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

BOOL CMFCApplication1Dlg::OnInitDialog()
{
    ModifyStyle(0, WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX, TRUE);
    ...
}

考虑修改对话框模板(在.RC文件中)以包括必要的样式位,而不是在运行时修改样式。

答案 1 :(得分:1)

MFC与编写没有任何框架的对话框没有什么不同。您声明一个DIALOGEX资源,并让系统加载该资源,并显示基于该模板的对话框。

要获得一个带有最小化对话框的对话框,它至少需要样式WS_MINIMIZEBOXWS_SYSMENU 1 。打开定义了DIALOGEX对话框模板的.rc脚本,并确保在STYLE元素中存在这两种样式。

基于对话框的应用程序(带有最小化框)的默认对话框模板通常如下定义:

IDD_MFCAPPLICATION1_DIALOG DIALOGEX  0, 0, 320, 200
STYLE DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION
 | WS_THICKFRAME
 | WS_SYSMENU
 | WS_MINIMIZEBOX
EXSTYLE WS_EX_APPWINDOW
CAPTION ""
FONT 8, "MS Shell Dlg"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,209,179,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,263,179,50,14
    CTEXT           "TODO: Place dialog controls here.",IDC_STATIC,10,96,300,8
END

您无需编写在运行时执行的任何代码即可获得此行为。


1 来自Window StylesWS_MINIMIZEBOX:该窗口具有最小化按钮。[...] {{ 1}}样式也必须指定。

答案 2 :(得分:0)

BOOL CMFCApplication1Dlg::OnInitDialog(){

ModifyStyle(0, WS_MINIMIZEBOX, TRUE);
ModifyStyle(0, WS_POPUP, TRUE);
ModifyStyle(0, WS_BORDER, TRUE);
ModifyStyle(0, WS_SYSMENU, TRUE);
ModifyStyle(0, WS_CAPTION, TRUE);