66656


MFCのダイアログペースのプロジェクトでダイアログをユーザーがドラッグ&ドロップでリサイズできないようにするやり方が分からず困っています。  
以下のサイトを参考に、PreCreateWindow関数をクラスウィザードを使って作成しましたが、  
作成したソースコードの`cppcs.style &= ~WS_SIZEBOX;
//サイズ変更禁止`の処理を通ってもダイアログのサイズが変更できるままでした。

参考サイト１：<http://www.ne.jp/asahi/hishidama/home/tech/vcpp/size.html>

LearningPokectDlg.h内

[code]

    // LearningPokectDlg.h : ヘッダー ファイル
    //
    
    #pragma once
    #include "ToDoDlg.h"
    #include "DoneDlg.h"
    
    // CLearningPokectDlg ダイアログ
    class CLearningPokectDlg : public CDialogEx
    {
    // コンストラクション
    public:
        CLearningPokectDlg(CWnd* pParent = nullptr);    // 標準コンストラクター
    
    
    
    // ダイアログ データ
    #ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_LEARNINGPOKECT_DIALOG };
    #endif
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV サポート
    
    
    // 実装
    protected:
        HICON m_hIcon;
    
        // 生成された、メッセージ割り当て関数
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        DECLARE_MESSAGE_MAP()
    private:
        /*privateメンバ変数*/
        // タブを制御するコントロール変数
        CTabCtrl m_tab;
        // To Doタブ(m_child_dlg[0])と完了タブ(m_child_dlg[1])へのポインタ配列
        CDialog* m_child_dlg[2];
    
        /*privateメンバ関数*/
        afx_msg void OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult);
        void InitTabs();
    
        // Escボタンを押したときにダイアログを閉じないようにする
        afx_msg void OnIdcancel();
    
        // ×ボタンを押したときにアプリを終了する
        afx_msg void OnClose();
    
        /*************************************************
        このアプリを起動したときの座標をこのアプリを最後に終了した位置に設定する処理群
        *************************************************/
        void InitThisAppPos();
        void GetIniSetting(WINDOWPLACEMENT &this_app_position);
        afx_msg void OnDestroy();
        /*************************************************/
    public:
    
        virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
    };
    
    
[/code]

LearningPokectDlg.cpp内

[code]

    // LearningPokectDlg.cpp : 実装ファイル
    //
    
    #include "stdafx.h"
    #include "LearningPokect.h"
    #include "LearningPokectDlg.h"
    #include "afxdialogex.h"
    
    // 追加インクルード
    #include "IniFile.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    
    // アプリケーションのバージョン情報に使われる CAboutDlg ダイアログ
    
    class CAboutDlg : public CDialogEx
    {
    public:
        CAboutDlg();
    
    // ダイアログ データ
    #ifdef AFX_DESIGN_TIME
        enum { IDD = IDD_ABOUTBOX };
    #endif
    
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV サポート
    
    // 実装
    protected:
        DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    END_MESSAGE_MAP()
    
    
    // CLearningPokectDlg ダイアログ
    
    
    
    CLearningPokectDlg::CLearningPokectDlg(CWnd* pParent /*=nullptr*/)
        : CDialogEx(IDD_LEARNINGPOKECT_DIALOG, pParent)
    {
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CLearningPokectDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialogEx::DoDataExchange(pDX);
        DDX_Control(pDX, IDC_TAB, m_tab);
    }
    
    BEGIN_MESSAGE_MAP(CLearningPokectDlg, CDialogEx)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, &CLearningPokectDlg::OnTcnSelchangeTab)
        ON_WM_DESTROY()
        ON_WM_DESTROY()
        ON_COMMAND(IDCANCEL, &CLearningPokectDlg::OnIdcancel)
        ON_WM_CLOSE()
    END_MESSAGE_MAP()
    
    
    // CLearningPokectDlg メッセージ ハンドラー
    
    BOOL CLearningPokectDlg::OnInitDialog()
    {
        CDialogEx::OnInitDialog();
    
        // "バージョン情報..." メニューをシステム メニューに追加します。
    
        // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);
    
        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != nullptr)
        {
            BOOL bNameValid;
            CString strAboutMenu;
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
            ASSERT(bNameValid);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }
    
        // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
        //  Framework は、この設定を自動的に行います。
        SetIcon(m_hIcon, TRUE);         // 大きいアイコンの設定
        SetIcon(m_hIcon, FALSE);        // 小さいアイコンの設定
    
        // TODO: 初期化をここに追加します。
    
        // タブを初期化する(詳細は関数内コメントを参照)。
        InitTabs();
    
        InitThisAppPos();
    
        return TRUE;  // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
    }
    
    void CLearningPokectDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialogEx::OnSysCommand(nID, lParam);
        }
    }
    
    // ダイアログに最小化ボタンを追加する場合、アイコンを描画するための
    //  下のコードが必要です。ドキュメント/ビュー モデルを使う MFC アプリケーションの場合、
    //  これは、Framework によって自動的に設定されます。
    
    void CLearningPokectDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // 描画のデバイス コンテキスト
    
            SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
            // クライアントの四角形領域内の中央
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;
    
            // アイコンの描画
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialogEx::OnPaint();
        }
    }
    
    // ユーザーが最小化したウィンドウをドラッグしているときに表示するカーソルを取得するために、
    //  システムがこの関数を呼び出します。
    HCURSOR CLearningPokectDlg::OnQueryDragIcon()
    {
        return static_cast<HCURSOR>(m_hIcon);
    }
    
    /*************************************************
    
    関数名 OnTcnSelchangeTab
    
    機能   選択したタブの子ダイアログを表示する。
    
    戻り値 なし
    
    備考 参考サイト：書き忘れた。
    
    *************************************************/
    void CLearningPokectDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
    {
        // TODO: ここにコントロール通知ハンドラー コードを追加します。
        auto cur = m_tab.GetCurSel();
        for (int i = 0; i < 2; i++) {
            m_child_dlg[i]->ShowWindow(i == cur ? SW_SHOW : SW_HIDE);
        }
    
        *pResult = 0;
    }
    
    /*************************************************
    
    関数名 InitTabs
    
    機能   タブを初期化する
    
    戻り値 なし
    
    *************************************************/
    void CLearningPokectDlg::InitTabs()
    {
        // 各タブを作成する
        m_tab.InsertItem(0, _T("To Do"));
        m_tab.InsertItem(1, _T("完了"));
    
        // 各タブの中に表示する子ダイアログを作成する
        m_child_dlg[0] = new ToDoDlg(&m_tab);
        m_child_dlg[1] = new DoneDlg(&m_tab);
        m_child_dlg[0]->Create(IDD_TODO_DIALOG, &m_tab);
        m_child_dlg[1]->Create(IDD_DONE_DIALOG, &m_tab);
    
        // To Doリストの子ダイアログの位置を調整する
        CRect m_tab_position;
        m_tab.GetWindowRect(m_tab_position);
        m_tab.AdjustRect(FALSE, m_tab_position);
        m_tab.ScreenToClient(m_tab_position);
        m_child_dlg[0]->MoveWindow(m_tab_position);
        m_child_dlg[1]->MoveWindow(m_tab_position);
    
        // To Doリストの子ダイアログを表示する
        m_child_dlg[0]->ShowWindow(SW_SHOW);
    }
    
    /*************************************************
    
    関数名 InitThisAppPos
    
    機能   このアプリを起動したときの座標をこのアプリを最後に終了した位置に設定する。
    
    戻り値 なし
    
    備考 参考サイト：
    http://pg-sample.sagami-ss.net/?eid=29
    
    *************************************************/
    void CLearningPokectDlg::InitThisAppPos()
    {
        /*iniファイルを作成する*/
    
        /// 実行ファイルのファイルパスを取得する
    
        // iniファイルを保持するための一時メモリ領域
        LPTSTR p_cs_ini_file_full_path = g_cs_ini_file_full_path.GetBuffer(_MAX_PATH);
        // ※_MAX_PATHが260なのは、次の計算による：1 + 2 + 256 + 1か[drive] [：\] [path] [null] = 260
    
        // p_cs_ini_file_full_pathにこのアプリのexeファイルへのフルパスを返す。
        GetModuleFileName(NULL, p_cs_ini_file_full_path, _MAX_PATH);
    
        // g_cs_ini_file_full_pathにexeファイルへのフルパスからexeを除いたパスを設定する。
        g_cs_ini_file_full_path.GetBufferSetLength(wcslen(p_cs_ini_file_full_path) - 3);
        // g_cs_ini_file_full_pathにiniという文字列を加えてiniファイルへのフルパスを保持する。
        g_cs_ini_file_full_path += _T("ini");
    
        // このアプリの座標を保持する構造体
        // データ構造をどうやって引数にする？ -> オーバーロード関数を作れば？？
        WINDOWPLACEMENT this_app_position;
    
        // this_app_positionが確保したメモリを0で初期化する。
        ZeroMemory(&this_app_position, sizeof(WINDOWPLACEMENT));
    
        // もしiniファイルがなければ
        if (!IsExistingFile(g_cs_ini_file_full_path))
        {
            /// iniファイルを生成する
            FILE *fp;
    
            // iniファイルのパスを処理するために一時的に使う変数
            TCHAR temp_ini_file_full_path[_MAX_PATH];
    
            wcscpy_s(temp_ini_file_full_path, _MAX_PATH / sizeof(TCHAR), g_cs_ini_file_full_path);
    
            // iniファイルを開いて書き込み準備をする。
            // ※wtは恐らくテキストへ書き込むでOKだと思う。
            _wfopen_s(&fp, temp_ini_file_full_path, L"wt");
    
            // 以下アプリの座標情報を格納するWINDOWPLACEMENT構造体を初期化する。
            fwrite("[WINDOWPLACEMENT]¥r¥n", wcslen(L"[WINDOWPLACEMENT]¥r¥n"), 1, fp);
    
            fwrite("length=0¥r¥n", wcslen(L"length=0¥r¥n"), 1, fp);
    
            fwrite("flags=0¥r¥n", wcslen(L"flags=0¥r¥n"), 1, fp);
    
            fwrite("ptMinPosition.x=0¥r¥n", wcslen(L"ptMinPosition.x=0¥r¥n"), 1, fp);
    
            fwrite("ptMinPosition.y=0¥r¥n", wcslen(L"ptMinPosition.y=0¥r¥n"), 1, fp);
    
            fwrite("ptMaxPosition.x=0¥r¥n", wcslen(L"ptMaxPosition.x=0¥r¥n"), 1, fp);
    
            fwrite("ptMaxPosition.y=0¥r¥n", wcslen(L"ptMaxPosition.y=0¥r¥n"), 1, fp);
    
            fwrite("rcNormalPosition.top=452¥r¥n", wcslen(L"rcNormalPosition.top=452¥r¥n"), 1, fp);
    
            fwrite("rcNormalPosition.left=750¥r¥n", wcslen(L"rcNormalPosition.left=750¥r¥n"), 1, fp);
    
            fwrite("rcNormalPosition.bottom=872¥r¥n", wcslen(L"rcNormalPosition.bottom=872¥r¥n"), 1, fp);
    
            fwrite("rcNormalPosition.right=1429¥r¥n", wcslen(L"rcNormalPosition.right=1429¥r¥n"), 1, fp);
    
            fclose(fp);
        }
        // もしiniファイルがあれば
        else
        {
            // iniファイルにセーブされたWINDOWPLACEMENT構造体を取得する。
            GetIniSetting(this_app_position);
    
            /*ウィンドウをユーザーがリサイズできないようにしたい*/
    
            // その他試したこと
            // 以下ではアプリが表示されないバグが発生する。
            /*MINMAXINFO* lpMMI;
            lpMMI = (MINMAXINFO*)malloc(sizeof(MINMAXINFO));
    
            lpMMI->ptMaxTrackSize.x = this_app_position.length;
            lpMMI->ptMinTrackSize.x = this_app_position.length;
            lpMMI->ptMaxTrackSize.y = this_app_position.rcNormalPosition.top - this_app_position.rcNormalPosition.bottom;;
            lpMMI->ptMinTrackSize.y = this_app_position.rcNormalPosition.top - this_app_position.rcNormalPosition.bottom;;
    
            OnGetMinMaxInfo(lpMMI);
    
            free(lpMMI);*/
    
            // 試したこと１
            //CREATESTRUCT createstruct;
            //PreCreateWindow(createstruct);
    
            // 試したこと３
            BOOL test = FALSE;
    
            test = ModifyStyle(0, WS_THICKFRAME, SWP_NOSIZE); //サイズ変更不可
    
            // 取得したiniファイルのWINDOWPLACEMENT構造体データをこのアプリの座標に設定する。
            this->SetWindowPlacement(&this_app_position);
    
            // その他試したこと
            /*this->SetWindowPos(this,
                this_app_position.rcNormalPosition.left,
                this_app_position.rcNormalPosition.top,
                656,
                423,
                SWP_NOMOVE);*/
        }
    }
    
    /*************************************************
    
    関数名 GetIniSetting
    
    機能   ウィンドウの位置をiniファイルから読込
    
    戻り値 WINDOWPLACEMENT構造体
    
    備考 参考サイト：
    http://pg-sample.sagami-ss.net/?eid=29
    
    *************************************************/
    void CLearningPokectDlg::GetIniSetting(WINDOWPLACEMENT &this_app_position)
    {
        this_app_position.length = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"length", 0, g_cs_ini_file_full_path);
    
        this_app_position.flags = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"flags", 0, g_cs_ini_file_full_path);
    
        this_app_position.ptMinPosition.x = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"ptMinPosition.x", 0, g_cs_ini_file_full_path);
    
        this_app_position.ptMinPosition.y = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"ptMinPosition.y", 0, g_cs_ini_file_full_path);
    
        this_app_position.ptMaxPosition.x = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"ptMaxPosition.x", 0, g_cs_ini_file_full_path);
    
        this_app_position.ptMaxPosition.y = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"ptMaxPosition.y", 0, g_cs_ini_file_full_path);
    
        this_app_position.rcNormalPosition.top = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"rcNormalPosition.top", 0, g_cs_ini_file_full_path);
    
        this_app_position.rcNormalPosition.left = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"rcNormalPosition.left", 0, g_cs_ini_file_full_path);
    
        this_app_position.rcNormalPosition.bottom = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"rcNormalPosition.bottom", 0, g_cs_ini_file_full_path);
    
        this_app_position.rcNormalPosition.right = GetPrivateProfileInt(L"WINDOWPLACEMENT", L"rcNormalPosition.right", 0, g_cs_ini_file_full_path);
    }
    
    /*************************************************
    
    関数名 OnDestroy
    
    機能   ダイアログの位置とサイズを取得して保持
    
    戻り値 なし
    
    備考 参考サイト：
    http://pg-sample.sagami-ss.net/?eid=29
    
    *************************************************/
    void CLearningPokectDlg::OnDestroy()
    {
        CDialogEx::OnDestroy();
    
        // TODO: ここにメッセージ ハンドラー コードを追加します。
        WINDOWPLACEMENT this_app_position;
    
        TCHAR temp_WINDOWPLACEMENT_member[_MAX_PATH];
    
        //iniファイルの存在チェック
        if (!IsExistingFile(g_cs_ini_file_full_path))
        {
            //iniファイルが存在しないときは書き込みを行わない
            return;
        }
    
        this->GetWindowPlacement(&this_app_position);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.length);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"length", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.flags);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"flags", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.ptMinPosition.x);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"ptMinPosition.x", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.ptMinPosition.y);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"ptMinPosition.y", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.ptMaxPosition.x);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"ptMaxPosition.x", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.ptMaxPosition.y);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"ptMaxPosition.y", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.rcNormalPosition.top);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"rcNormalPosition.top", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.rcNormalPosition.left);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"rcNormalPosition.left", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.rcNormalPosition.bottom);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"rcNormalPosition.bottom", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    
        swprintf_s(temp_WINDOWPLACEMENT_member, L"%i", this_app_position.rcNormalPosition.right);
    
        WritePrivateProfileString(L"WINDOWPLACEMENT", L"rcNormalPosition.right", temp_WINDOWPLACEMENT_member, g_cs_ini_file_full_path);
    }
    
    /*************************************************
    
    関数名 OnIdcancel
    
    機能   Escボタンを押したときにダイアログを閉じないようにする
    
    戻り値 なし
    
    備考 参考サイト：なし
    
    *************************************************/
    void CLearningPokectDlg::OnIdcancel()
    {
        // TODO: ここにコマンド ハンドラー コードを追加します。
    
    }
    
    /*************************************************
    
    関数名 OnClose
    
    機能   ×ボタンを押したときにアプリを終了する
    
    戻り値 なし
    
    備考 参考サイト：×ボタンを押したときに呼ばれるイベントハンドラは？：
    http://dougubak.blog36.fc2.com/blog-entry-1.html
    
    *************************************************/
    void CLearningPokectDlg::OnClose()
    {
        // TODO: ここにメッセージ ハンドラー コードを追加するか、既定の処理を呼び出します。
        DestroyWindow();
    
        CDialogEx::OnClose();
    }
    
    
    BOOL CLearningPokectDlg::PreCreateWindow(CREATESTRUCT& cs)
    {
        // TODO: この位置で CREATESTRUCT cs を修正して、Window クラスやスタイルを修正してください。
        cs.cx = 656;    //横のサイズ
        cs.cy = 423;    //縦のサイズ
    
        cs.style &= ~WS_SIZEBOX;    //サイズ変更禁止
    
        return CDialogEx::PreCreateWindow(cs);
    }
    
[/code]

他に試したことは、以下の参考サイト２の  
１）リソースファイルで、ウィンドウにWS_THICKFRAMEあるいは、WS_SIZEBOXの属性を与えます。  
と  
2） WIN32のAPIを通って、１）の同じ機能を行うこともできます。  
ModifyStyle( 0, WS_THICKFRAME ); //サイズ変更不可  
ですが、  
１）はResource.hの中を見てもリソースIDがあるだけですし、属性を与えるという意味が分かりませんでした。  
２）は

参考サイト２：<http://hudson.doorblog.jp/archives/42861443.html>

MFCのダイアログペースのプロジェクトでユーザーがドラッグ&ドロップでダイアログをリサイズできないようにするやり方はどうすればよいのか教えて頂けるとありがたいです。  
どうかよろしくお願いいたします。


CC BY-SA 4.0
2020-05-15T23:53:52.163
66652
2020-05-16T02:41:28.547
2020-05-16T02:28:15.073
21034
21034
question
c++ mfc
MFCでダイアログをリサイズできないようにするやり方が分からない


`WS_THICKFRAME`や`WS_SIZEBOX`を外すという点までは合っていますが、その方法が誤っています。

ダイアログを制御するためには

[![画像の説明をここに入力](https://i.stack.imgur.com/5FJjt.png)](https://i.stack.imgur.com/5FJjt.png)

図のように、リソースエディタで、Borderを`Resizing`以外の値に設定します。なお、それぞれの項目は[Window
Style](https://docs.microsoft.com/en-us/windows/win32/winmsg/window-styles)の

  * None → なし
  * Thin → `WS_CAPTION`
  * Resizing → `WS_CAPTION | WS_TICKFRAME`
  * Dialog Frame → `WS_CAPTION | WS_MODALFRAME`

に対応します。なおWindow Styleでも触れられていますが、`WS_THICKFRAME`と`WS_SIZEBOX`は同じものです。

* * *

残念ながら参照されているサイトが的外れです。参考サイト１・２にはそれぞれ

> AppWizardで作成したSDIやMDIのMFCアプリケーションは
>
> Windowサイズ変更禁止・許可の設定の裏

とあります。どちらもSDIウィンドウ、MDIウィンドウが対象であり、ダイアログには適用できない手法です。  
実際、ウィンドウを作成するには[`CreateWindow`](https://docs.microsoft.com/en-
us/windows/win32/api/winuser/nf-winuser-
createwindoww)等を使用しますが、ダイアログを作成するには[`CreateDialog`](https://docs.microsoft.com/en-
us/windows/win32/api/winuser/nf-winuser-
createdialogw)等を使用するため、`PreCreateWindow`が機能しないのは当然です。

MFCを理解するには、その基になっているWindows APIを使用したウィンドウ操作・ダイアログ操作を理解する必要があります。


CC BY-SA 4.0
2020-05-16T02:41:28.547
66656
2020-05-16T02:41:28.547
2020-06-17T08:14:45.997
-1
4236
66652
answer