<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>MFC</title><link>http://blogs.wankuma.com/bsim/category/2046.aspx</link><description>MFC</description><managingEditor>びーしむ - bsim@wankuma.com</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>びーしむ - bsim@wankuma.com</dc:creator><title>CMFCMenuBar 階層を持ったメニューを動的に作成する</title><link>http://blogs.wankuma.com/bsim/archive/2011/06/22/200222.aspx</link><pubDate>Wed, 22 Jun 2011 14:22:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2011/06/22/200222.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/200222.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2011/06/22/200222.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/200222.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/200222.aspx</trackback:ping><description>&lt;span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium 'MS PGothic'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"&gt;&lt;span style="text-align: left; line-height: 24px; color: rgb(51,51,51)" class="Apple-style-span"&gt; &lt;p style="margin: 0.5em 0px 0.9em"&gt;前に CMFCMenuBar を使ったメニューを動的に作成する方法を書きました。&lt;/p&gt; &lt;p style="margin: 0.5em 0px 0.9em"&gt;&lt;a href="http://d.hatena.ne.jp/poyonshot/20110619/1308494399" target="_blank"&gt;&lt;u&gt;&lt;font color="#0066cc"&gt;CMFCMenuBar メニューを動的に作成する - ビリヤードが好きなプログラマー&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="margin: 0.5em 0px 0.9em"&gt;さて、階層をもったメニューを動的に追加する方法は？&lt;/p&gt; &lt;p style="margin: 0.5em 0px 0.9em"&gt;&lt;a href="http://d.hatena.ne.jp/poyonshot/20110622"&gt;続きを読む&lt;/a&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/200222.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>複数行のプロパティ</title><link>http://blogs.wankuma.com/bsim/archive/2010/04/01/187651.aspx</link><pubDate>Thu, 01 Apr 2010 23:44:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2010/04/01/187651.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/187651.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2010/04/01/187651.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/187651.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/187651.aspx</trackback:ping><description>&lt;p&gt;「プロパティごとに&lt;span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium 'MS PGothic'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"&gt;&lt;span style="font-family: verdana, geneva, arial, helvetica, sans-serif; font-size: 14px" class="Apple-style-span"&gt;高さ指定したい」&lt;/span&gt;&lt;/span&gt;という趣旨のコメントをもらったので、その方法を調べてみたのですが、なかなか難しい。その中で１番手軽？にできそうな方法を書きたいと思います。&lt;/p&gt; &lt;p&gt;今回は、下図のように2行分の高さの文字列入力プロパティを作成します。&lt;/p&gt; &lt;p&gt;&lt;img src="http://bsim.wankuma.com/blogimg/2010/2010040101.png"&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;２行入力できるプロパティPGPMultiLineTextを作成します。&lt;/p&gt;
&lt;pre class="brush: cpp" name="code"&gt;class PGPMultiLineText : public CMFCPropertyGridProperty {
public:
    PGPMultiLineText(const CString &amp;amp;name, const CString &amp;amp;descr, DWORD_PTR dwData);

    virtual CWnd* CreateInPlaceEdit(CRect rectEdit, BOOL&amp;amp; bDefaultFormat);

    virtual void OnDrawValue(CDC* pDC, CRect rect);
    virtual void OnPosSizeChanged(CRect /*rectOld*/);
};
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;複数行入力するできるようにするためにエディットボックスを修正します。&lt;/p&gt;
&lt;pre class="brush: cpp" name="code"&gt;CWnd* PGPMultiLineText::CreateInPlaceEdit(CRect rectEdit, BOOL&amp;amp; bDefaultFormat)
{
    CEdit *pWndEdit = new CEdit;
    DWORD dwStyle = WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL | ES_MULTILINE;

    pWndEdit-&amp;gt;Create(dwStyle, rectEdit, m_pWndList, AFX_PROPLIST_ID_INPLACE);
    bDefaultFormat = TRUE;
    return pWndEdit;
}
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;プロパティ値の描画を複数行に対応させます。CMFCPropertyGridProperty::OnDrawValueをコピーしてpDC-&amp;gt;DrawTextの行を修正しただけです。&lt;/p&gt;
&lt;pre class="brush: cpp" name="code"&gt;void PGPMultiLineText::OnDrawValue(CDC* pDC, CRect rect)
{
	ASSERT_VALID(this);
	ASSERT_VALID(pDC);
	ASSERT_VALID(m_pWndList);

	if ((IsGroup() &amp;amp;&amp;amp; !m_bIsValueList) || !HasValueField())
	{
		return;
	}

	CFont* pOldFont = NULL;
	if (IsModified() &amp;amp;&amp;amp; m_pWndList-&amp;gt;IsMarkModifiedProperties())
	{
		pOldFont = pDC-&amp;gt;SelectObject(&amp;amp;m_pWndList-&amp;gt;GetBoldFont());
	}

	CString strVal = FormatProperty();

	rect.DeflateRect(AFX_TEXT_MARGIN, 2);

	pDC-&amp;gt;DrawText(strVal, rect, DT_LEFT | DT_WORDBREAK | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS);

	m_bValueIsTruncated = pDC-&amp;gt;GetTextExtent(strVal).cx &amp;gt; rect.Width();

	if (pOldFont != NULL)
	{
		pDC-&amp;gt;SelectObject(pOldFont);
	}
}
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;プロパティのレイアウトを調整するときにOnPosSizeChangedが呼び出されるので、ここでプロパティの高さを２倍にします。&lt;/p&gt;
&lt;pre class="brush: cpp" name="code"&gt;void PGPMultiLineText::OnPosSizeChanged(CRect /*rectOld*/)
{
    m_Rect.bottom += m_Rect.Height();
}
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;これで、PGPMultiLineTextは完成です。&lt;br&gt;だだ、単純にこれを使うと下図のように次のプロパティと重なってしまいます。&lt;/p&gt;
&lt;p&gt;&lt;img src="http://bsim.wankuma.com/blogimg/2010/2010040102.png"&gt;&lt;/p&gt;
&lt;p&gt;そこで、重なってしまうプロパティの位置にダミーのプロパティを配置しましょう。&lt;/p&gt;
&lt;pre class="brush: cpp" name="code"&gt;BOOL Dlg5::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    //プロパティグリッドコントロールの初期化
    if(!m_PGC.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(0,0,1,1), this, IDC_STATIC)){
        return FALSE;
    }
    m_PGC.EnableDescriptionArea(FALSE);
    m_PGC.SetVSDotNetLook();

    //表示するプロパティを追加します。
    CMFCPropertyGridProperty *pInt
        = new CMFCPropertyGridProperty(_T("整数型のプロパティ"), (variant_t)(int)0, _T(""));
    m_PGC.AddProperty(pInt);

    CMFCPropertyGridProperty *pDbl
        = new CMFCPropertyGridProperty(_T("実数型のプロパティ"), (variant_t)(double)0.0, _T(""));
    m_PGC.AddProperty(pDbl);

    PGPMultiLineText *pMulti
         = new PGPMultiLineText(_T("複数行\nのプロパティ"), _T(""), IDC_STATIC);
    pMulti-&amp;gt;SetValue((variant_t)_T("1行目\r\n2行目"));
    m_PGC.AddProperty(pMulti);

    //...pMultiが２行分のスペースを使うのでダミーのプロパティを追加します。
    CMFCPropertyGridProperty *pDmy
        = new CMFCPropertyGridProperty(_T(""), (variant_t)_T(""), _T(""));
    m_PGC.AddProperty(pDmy);

    CMFCPropertyGridProperty *pBool
        = new CMFCPropertyGridProperty(_T("bool型のプロパティ"), (variant_t)true, _T(""));
    m_PGC.AddProperty(pBool);

    CMFCPropertyGridProperty *pStr
        = new CMFCPropertyGridProperty(_T("文字列のプロパティ"), (variant_t)_T(""), _T(""));
    m_PGC.AddProperty(pStr);


    //ダイアログのレイアウトの調整
    CRect rc;
    GetClientRect(&amp;amp;rc);
    m_PGC.SetWindowPos(0, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOACTIVATE | SWP_NOZORDER);

    GetDlgItem(IDCANCEL)-&amp;gt;ShowWindow(SW_HIDE);

    return TRUE;
}
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;今回の方法では、行の高さの倍数でしか設定できませんが、これだけの機能でも十分かなと思います。&lt;/p&gt;
&lt;p&gt;任意の高さに対応するにはどうすればよいでしょうねぇ。。。。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/187651.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>CMFCPropertyGridPropertyの作成（その２）</title><link>http://blogs.wankuma.com/bsim/archive/2010/03/08/186916.aspx</link><pubDate>Mon, 08 Mar 2010 23:48:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2010/03/08/186916.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/186916.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2010/03/08/186916.aspx#Feedback</comments><slash:comments>205</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/186916.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/186916.aspx</trackback:ping><description>&lt;p&gt;CMFCPropertyGridPropertyの次のコンストラクタを使うとグループのプロパティを作成でき、階層が１段深くなります。&lt;br&gt;&lt;/p&gt;&lt;pre class="brush: cpp" name="code"&gt;// Group constructor
CMFCPropertyGridProperty(const CString&amp;amp; strGroupName, DWORD_PTR dwData = 0, BOOL bIsValueList = FALSE);
&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;&lt;img src="http://bsim.wankuma.com/blogimg/2010/2010030801.png"&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;グループのプロパティに追加するときはAddSubItemを使います。 &lt;/p&gt;&lt;pre class="brush: cpp" name="code"&gt;BOOL Dlg4::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    //プロパティグリッドコントロールの初期化
    if(!m_PGC.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(0,0,1,1), this, IDC_STATIC)){
        return FALSE;
    }
    m_PGC.EnableDescriptionArea();
    m_PGC.SetDescriptionRows(2);
    m_PGC.SetVSDotNetLook();

    //表示するプロパティを追加します。
    CMFCPropertyGridProperty *pGrp
        = new CMFCPropertyGridProperty(_T("グループ"));
    m_PGC.AddProperty(pGrp);

    CMFCPropertyGridProperty *pInt
        = new CMFCPropertyGridProperty(_T("整数型のプロパティ"), (variant_t)(int)0, _T(""));
    pGrp-&amp;gt;AddSubItem(pInt);

    CMFCPropertyGridProperty *pDbl
        = new CMFCPropertyGridProperty(_T("実数型のプロパティ"), (variant_t)(double)0.0, _T(""));
    pGrp-&amp;gt;AddSubItem(pDbl);

    CMFCPropertyGridProperty *pBool
        = new CMFCPropertyGridProperty(_T("bool型のプロパティ"), (variant_t)true, _T(""));
    pGrp-&amp;gt;AddSubItem(pBool);

    CMFCPropertyGridProperty *pStr
        = new CMFCPropertyGridProperty(_T("文字列のプロパティ"), (variant_t)_T(""), _T(""));
    pGrp-&amp;gt;AddSubItem(pStr);

    //ダイアログのレイアウトの調整
    CRect rc;
    GetDlgItem(IDC_DUMMY_PGC)-&amp;gt;GetWindowRect(&amp;amp;rc);
    ScreenToClient(&amp;amp;rc);
    m_PGC.SetWindowPos(0, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOACTIVATE | SWP_NOZORDER);

    return TRUE;
}
&lt;/pre&gt;&lt;br&gt;&lt;br&gt;グループのプロパティをプロパティグリッドコントロールにAddPropertyする処理とシンプルプロパティをグループのプロパティにAddSubItemする処理の順番を上の例の逆にするとシンプルプロパティのメンバ変数m_pWndListがNULLのまま設定されず、別の処理でASSERTが出て困った記憶があったのですが、今回、再現しなかったので、勘違いしてたみたいです・・・ 
&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/186916.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>CMFCPropertyGridPropertyの作成</title><link>http://blogs.wankuma.com/bsim/archive/2010/03/04/186715.aspx</link><pubDate>Thu, 04 Mar 2010 00:20:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2010/03/04/186715.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/186715.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2010/03/04/186715.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/186715.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/186715.aspx</trackback:ping><description>&lt;p&gt;CMFCPropertyGridCtrlに追加するCMFCPropertyGridPropertyは、使用するコンストラクタによってグループとシンプルプロパティの2種類のプロパティを区別して作成します。&lt;br&gt;&lt;br&gt;整数や文字列といった値を設定しているのは、シンプルプロパティの方で,、このシンプルプロパティは、コンストラクタに指定する値の型によって、プロパティの動作が決まります。&lt;br&gt;&lt;br&gt;動作（振る舞い、Valueの書式など）の違いがわかるプロパティを代表して、整数型、実数型、bool型、文字列型のプロパティを作成します。&lt;br&gt;&lt;img src="http://bsim.wankuma.com/blogimg/2010/2010030401.png"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;CMFCPropertyGridPropertyのコンストラクタの2番目の引数に注意して下さい。&lt;br&gt;variant_t を使っていますが、これを使う方法というのはMFCのサンプルソースから拝借してきました。&lt;/p&gt;&lt;pre class="brush: cpp" name="code"&gt;BOOL Dlg3::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    //プロパティグリッドコントロールの初期化
    if(!m_PGC.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER, CRect(0,0,1,1), this, IDC_STATIC)){
        return FALSE;
    }
    m_PGC.EnableDescriptionArea();
    m_PGC.SetDescriptionRows(2);
    m_PGC.SetVSDotNetLook();

    //表示するプロパティを追加します。
    CMFCPropertyGridProperty *pInt
        = new CMFCPropertyGridProperty(_T("整数型のプロパティ"), (variant_t)(int)0, _T(""));
    m_PGC.AddProperty(pInt);

    CMFCPropertyGridProperty *pDbl
        = new CMFCPropertyGridProperty(_T("実数型のプロパティ"), (variant_t)(double)0.0, _T(""));
    m_PGC.AddProperty(pDbl);

    CMFCPropertyGridProperty *pBool
        = new CMFCPropertyGridProperty(_T("bool型のプロパティ"), (variant_t)true, _T(""));
    m_PGC.AddProperty(pBool);

    CMFCPropertyGridProperty *pStr
        = new CMFCPropertyGridProperty(_T("文字列のプロパティ"), (variant_t)_T(""), _T(""));
    m_PGC.AddProperty(pStr);

    //ダイアログのレイアウトの調整
    CRect rc;
    GetDlgItem(IDC_DUMMY_PGC)-&amp;gt;GetWindowRect(&amp;amp;rc);
    ScreenToClient(&amp;amp;rc);
    m_PGC.SetWindowPos(0, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOACTIVATE | SWP_NOZORDER);

    return TRUE;
}
&lt;/pre&gt;
&lt;p&gt;&lt;br&gt;作成したこれらプロパティのデフォルトの機能を、あなたが考えている動きと比較しながら、確認して下さい。整数型のプロパティには整数だけしか設定できないとか、bool型のプロパティは、プルダウンのリストが表示されるとか、たくさん気づくところがあると思います。&lt;/p&gt;
&lt;p&gt;次回は、それぞれのプロパティの動作について、もう少し詳しく見てみます。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/186715.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>CMFCPropertyGridCtrlの作成（その２）</title><link>http://blogs.wankuma.com/bsim/archive/2010/03/02/186661.aspx</link><pubDate>Tue, 02 Mar 2010 23:07:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2010/03/02/186661.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/186661.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2010/03/02/186661.aspx#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/186661.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/186661.aspx</trackback:ping><description>&lt;p&gt;CMFCPropertyGridCtrlを使うときにリソースエディタでサイズを指定したいときは、どうすればよいでしょうか？&lt;/p&gt; &lt;p&gt;その１つの方法は、ダミーのウィンドウを張り付けてそのサイズを使うことです。&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://bsim.wankuma.com/blogimg/2010/2010030301.png"&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;リソースエディタでダイアログにスタティックテキストを追加し、サイズを調整します。&lt;br&gt;追加したスタティックテキストのIDをIDC_DUMMY_PGCに、VisibleプロパティをFalseに設定します。&lt;br&gt;あとはOnInitDialogで、IDC_DUMMY_PGCのウィンドウサイズを取得し、m_PGCに設定するだけです。&lt;/p&gt;&lt;pre class="brush: cpp" name="code"&gt;class Dlg2 : public CDialogEx {
public:
    CMFCPropertyGridCtrl m_PGC;
 
    virtual BOOL OnInitDialog();
}
&lt;/pre&gt;&lt;pre class="brush: cpp" name="code"&gt;BOOL Dlg2::OnInitDialog()
{
    CDialogEx::OnInitDialog();
 
    //プロパティグリッドコントロールの初期化
    if(!m_PGC.Create(WS_CHILD | WS_VISIBLE, CRect(0,0,1,1), this, IDC_STATIC)){
        return FALSE;
    }
    m_PGC.EnableDescriptionArea();
    m_PGC.SetVSDotNetLook();
 
    //表示するプロパティの追加
    CMFCPropertyGridProperty *pPGP = new CMFCPropertyGridProperty(
        _T("文字列のプロパティ"), _T("文字列を設定できます。"), 0);
    m_PGC.AddProperty(pPGP);
 
    //ダイアログのレイアウトの調整
    CRect rc;
    GetDlgItem(IDC_DUMMY_PGC)-&amp;gt;GetWindowRect(&amp;amp;rc);
    ScreenToClient(&amp;amp;rc);
    m_PGC.SetWindowPos(0, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
 
    return TRUE;
}
&lt;/pre&gt;&lt;br&gt;
&lt;p&gt;これでリソースエディタで、IDC_DUMMY_PGCのサイズや位置を変更しても、m_PGCの位置が連動して変わるようになりました。&lt;/p&gt;
&lt;p&gt;&lt;img src="http://bsim.wankuma.com/blogimg/2010/2010030302.png"&gt;&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/186661.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>CMFCPropertyGridCtrlの作成</title><link>http://blogs.wankuma.com/bsim/archive/2010/03/01/186623.aspx</link><pubDate>Mon, 01 Mar 2010 23:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2010/03/01/186623.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/186623.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2010/03/01/186623.aspx#Feedback</comments><slash:comments>957</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/186623.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/186623.aspx</trackback:ping><description>&lt;P&gt;CMFCPropertyGridCtrlをリソースエディタを使って、ボタン, エディットボックス, コンボボックス&lt;BR&gt;などのようにダイアログに追加する方法がわからなかったので、いつも、直接コードを記述している&lt;BR&gt;のですが、「この事で煮詰まってる人もいるかな？」っと思いまとめてみました。&lt;/P&gt;
&lt;P&gt;それではCMFCPropertyGridCtrlを追加した下のダイアログを作成してみましょう。&lt;BR&gt;&lt;IMG src="http://bsim.wankuma.com/blogimg/2010/2010030201.png"&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;最初に、CMFCPropertyGridCtrlを追加したいダイアログに変数m_PGCを追加します。&lt;BR&gt;この変数は、OnInitDialogで初期化します。&lt;BR&gt;&lt;BR&gt;&lt;PRE class="brush: cpp" name="code"&gt;class Dlg1 : public CDialogEx {
public:
    CMFCPropertyGridCtrl m_PGC;

    virtual BOOL OnInitDialog();
}
&lt;/PRE&gt;&lt;BR&gt;OnInitDialogでは、以下のことを行います。 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;1.プロパティグリッドコントロールを作成します。&lt;BR&gt;ウィンドウサイズは後から設定するので適当な値を指定しています。&lt;BR&gt;子ウィンドウのIDにはGetDlgItemを使わずにm_PGCでアクセスできるので、IDC_STATICを指定しています。&lt;/P&gt;
&lt;P&gt;2.表示するプロパティを追加します。&lt;/P&gt;
&lt;P&gt;3.ダイアログのレイアウトを調整します。&lt;BR&gt;今回はサイズを変更できないダイアログなのでOnInitDialogに直接記述しています。&lt;/P&gt;&lt;PRE class="brush: cpp" name="code"&gt;BOOL Dlg1::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    //プロパティグリッドコントロールの初期化
    if(!m_PGC.Create(WS_CHILD | WS_VISIBLE, CRect(0,0,1,1), this, IDC_STATIC)){
        return FALSE;
    }
    m_PGC.EnableDescriptionArea();
    m_PGC.SetVSDotNetLook();

    //表示するプロパティの追加
    CMFCPropertyGridProperty *pPGP = new CMFCPropertyGridProperty(
        _T("文字列のプロパティ"), _T("文字列を設定できます。"), 0);
    m_PGC.AddProperty(pPGP);

    //ダイアログのレイアウトの調整
    CRect rc;
    GetClientRect(&amp;amp;rc);
    m_PGC.SetWindowPos(0, 0, 0, rc.Width(), rc.Height(), SWP_NOACTIVATE | SWP_NOZORDER);

    return TRUE;
}
&lt;/PRE&gt;
&lt;P&gt;ここまでできれば、自分でコードをいじりながら動作を確認できます。&lt;BR&gt;設定を変更してみたり、新しいプロパティを追加したりして遊んで見て下さい。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/186623.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>CDockablePane の状態を知る</title><link>http://blogs.wankuma.com/bsim/archive/2010/01/29/185567.aspx</link><pubDate>Fri, 29 Jan 2010 21:19:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2010/01/29/185567.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/185567.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2010/01/29/185567.aspx#Feedback</comments><slash:comments>358</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/185567.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/185567.aspx</trackback:ping><description>&lt;p&gt;&lt;span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium 'MS PGothic'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"&gt;&lt;span style="font-family: verdana, geneva, arial, helvetica, sans-serif; font-size: 14px" class="Apple-style-span"&gt;CDockablePaneの表示状態を判断する方法について、&lt;/span&gt;&lt;/span&gt;&lt;span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium 'MS PGothic'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"&gt;&lt;span style="font-family: verdana, geneva, arial, helvetica, sans-serif; font-size: 14px" class="Apple-style-span"&gt;CDockablePane::IsVisibleのヘルプにいろいろ書いてあるのですが、読んでも自分にはよくわからないので、調べてみました。&lt;/span&gt;&lt;/span&gt;  &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium 'MS PGothic'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"&gt;&lt;span style="font-family: verdana, geneva, arial, helvetica, sans-serif; font-size: 14px" class="Apple-style-span"&gt;Visual Studioのメニューから、ファイル→新規作成→プロジェクトを選んで、アプリケーションの種類のプロジェクト形式を Visual Studio にして作成したMFCアプリケーション&lt;/span&gt;&lt;/span&gt;のCFileViewを使って確認します。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;１．CFileViewをフローティング状態にしたときの結果&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="502"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="137"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://bsim.wankuma.com/blogimg/2010/2010012801.png"&gt;&lt;/td&gt; &lt;td valign="top" width="363"&gt; &lt;table border="1" cellspacing="0" cellpadding="2" width="302"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="165"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;表示&lt;/td&gt; &lt;td valign="top" width="65" align="middle"&gt;非表示&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="165"&gt;IsVisible&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="65" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="165"&gt;IsWindowVisible&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="65" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="165"&gt;IsFloating&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="65" align="middle"&gt;TRUE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="165"&gt;IsDocked&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="65" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="165"&gt;IsAutoHideMode&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="65" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="165"&gt;IsHideInAutoHideMode&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="65" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="165"&gt;IsPaneVisible&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="65" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;２．CFileViewをドッキング状態にしたときの結果&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="418"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="148"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://bsim.wankuma.com/blogimg/2010/2010012802.png" width="220" height="102"&gt;&lt;/td&gt; &lt;td valign="top" width="268"&gt; &lt;table border="1" cellspacing="0" cellpadding="2" width="300"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="167"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="61" align="middle"&gt;表示&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;非表示&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="167"&gt;IsVisible&lt;/td&gt; &lt;td valign="top" width="61" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="167"&gt;IsWindowVisible&lt;/td&gt; &lt;td valign="top" width="61" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="167"&gt;IsFloating&lt;/td&gt; &lt;td valign="top" width="61" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="167"&gt;IsDocked&lt;/td&gt; &lt;td valign="top" width="61" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;TRUE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="167"&gt;IsAutoHideMode&lt;/td&gt; &lt;td valign="top" width="61" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="167"&gt;IsHideInAutoHideMode&lt;/td&gt; &lt;td valign="top" width="61" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="167"&gt;IsPaneVisible&lt;/td&gt; &lt;td valign="top" width="61" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="70" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;３．CFileViewを自動的に隠す状態にしたときの結果&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="337"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="221"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://bsim.wankuma.com/blogimg/2010/2010012803.png" width="211" height="97"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://bsim.wankuma.com/blogimg/2010/2010012804.png" width="208" height="44"&gt;&lt;/td&gt; &lt;td valign="top" width="114"&gt; &lt;table border="1" cellspacing="0" cellpadding="2" width="309"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="179"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="59" align="middle"&gt;表示&lt;/td&gt; &lt;td valign="top" width="69" align="middle"&gt;隠す&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="179"&gt;IsVisible&lt;/td&gt; &lt;td valign="top" width="59" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="69" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="179"&gt;IsWindowVisible&lt;/td&gt; &lt;td valign="top" width="59" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="69" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="179"&gt;IsFloating&lt;/td&gt; &lt;td valign="top" width="59" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="69" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="179"&gt;IsDocked&lt;/td&gt; &lt;td valign="top" width="59" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="69" align="middle"&gt;TRUE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="179"&gt;IsAutoHideMode&lt;/td&gt; &lt;td valign="top" width="59" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="69" align="middle"&gt;TRUE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="179"&gt;IsHideInAutoHideMode&lt;/td&gt; &lt;td valign="top" width="59" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="69" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="179"&gt;IsPaneVisible&lt;/td&gt; &lt;td valign="top" width="59" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="69" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;４．CFileViewをタブ付きドキュメント状態にしたときの結果&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="2" width="502"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="210"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://bsim.wankuma.com/blogimg/2010/2010012805.png" width="207" height="113"&gt;&lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://bsim.wankuma.com/blogimg/2010/2010012806.png" width="206" height="114"&gt;&lt;/td&gt; &lt;td valign="top" width="290"&gt; &lt;table border="1" cellspacing="0" cellpadding="2" width="312"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="178"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="56" align="middle"&gt;表示&lt;/td&gt; &lt;td valign="top" width="76" align="middle"&gt;隠す&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="178"&gt;IsVisible&lt;/td&gt; &lt;td valign="top" width="56" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="76" align="middle"&gt;TRUE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="178"&gt;IsWindowVisible&lt;/td&gt; &lt;td valign="top" width="56" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="76" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="178"&gt;IsFloating&lt;/td&gt; &lt;td valign="top" width="56" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="76" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="178"&gt;IsDocked&lt;/td&gt; &lt;td valign="top" width="56" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="76" align="middle"&gt;TRUE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="178"&gt;IsAutoHideMode&lt;/td&gt; &lt;td valign="top" width="56" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="76" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="178"&gt;IsHideInAutoHideMode&lt;/td&gt; &lt;td valign="top" width="56" align="middle"&gt;FALSE&lt;/td&gt; &lt;td valign="top" width="76" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="178"&gt;IsPaneVisible&lt;/td&gt; &lt;td valign="top" width="56" align="middle"&gt;TRUE&lt;/td&gt; &lt;td valign="top" width="76" align="middle"&gt;FALSE&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;これらの結果を見るとIsVisibleよりも、IsPaneVisibleを使うほうがよいのではないだろうか？&lt;/p&gt; &lt;p&gt;MSDNのCBasePane::IsPaneVisibleを見てみたら、「&lt;span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium 'MS PGothic'; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"&gt;&lt;span style="font-family: verdana, arial, helvetica, sans-serif; font-size: 11px" class="Apple-style-span"&gt;このトピックは作成中です。」&lt;/span&gt;&lt;/span&gt;でした。&lt;/p&gt; &lt;p&gt;おしまい。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/185567.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>CMFCMenuBar で Visual Studio のメニューと同じ動きをさせる</title><link>http://blogs.wankuma.com/bsim/archive/2009/12/15/183848.aspx</link><pubDate>Tue, 15 Dec 2009 13:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2009/12/15/183848.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/183848.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2009/12/15/183848.aspx#Feedback</comments><slash:comments>304</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/183848.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/183848.aspx</trackback:ping><description>&lt;P&gt;Visual Studio のメニューは、Gripper がないので、メニューをドラッグしてフローティングにできませんが、ツールバーの方を操作して順番を入れ替えることはできます。&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://bsim.wankuma.com/blogimg/2009/CMFCMenuBarVisualStudio_13EF3/2009121501.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=2009121501 border=0 alt=2009121501 src="http://bsim.wankuma.com/blogimg/2009/CMFCMenuBarVisualStudio_13EF3/2009121501_thumb.png" width=214 height=93&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;アプリケーションの種類のプロジェクト形式を Visual Studio にして作成したMFCアプリケーションのメニューは、Gripperがついていて、少し違います。このメニューバーをVisual Studio のものと同じ動きにする方法を調べたのですが、これが思いのほか難しい。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://bsim.wankuma.com/blogimg/2009/CMFCMenuBarVisualStudio_13EF3/2009121502.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=2009121502 border=0 alt=2009121502 src="http://bsim.wankuma.com/blogimg/2009/CMFCMenuBarVisualStudio_13EF3/2009121502_thumb.png" width=244 height=89&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;最初に void EnableGripper(BOOL bEnable) という関数をみつけ、関数名やMSDNの内容からしてこれかなと思ったんですけど、どうも上手くいかない。&lt;BR&gt;それで、ソースをみると中身は空っぽで何もしていない(汗）。&lt;/P&gt;
&lt;P&gt;そして、試行錯誤の道へ。。。&lt;BR&gt;AFX_CBRS_FLOAT を OFF にしたり、 BOOL CanFloat() const; をオーバーライドしてみましたが、ツールバーが常にメニューバーの上に来るようになってダメ。&lt;BR&gt;ヘルプを見ても、Webで検索しても全然わからず、ステップ実行でソースを追いかけて、今回説明する方法にたどりつきました。これにたどり着くまでに何日かかったか（遠い目。。。）&lt;/P&gt;
&lt;P&gt;MFC 使ってる人は、こんなことでハマらないのかなぁ。&lt;BR&gt;もっと簡単な方法があればぜひ教えて下さい。m(_ _)m&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;VSMenuBar.h&lt;/P&gt;&lt;PRE class="brush: cpp" name="code"&gt;class VSMenuBar : public CMFCMenuBar
{
    DECLARE_DYNAMIC(VSMenuBar)

public:
    virtual AFX_DOCK_TYPE GetDockingMode()const;
    virtual void SetPaneStyle(DWORD dwNewStyle);

protected:
    DECLARE_MESSAGE_MAP()
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};
&lt;/PRE&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;VSMenuBar.cpp&lt;/P&gt;&lt;PRE class="brush: cpp" name="code"&gt;IMPLEMENT_DYNAMIC(VSMenuBar, CMFCMenuBar)

AFX_DOCK_TYPE VSMenuBar::GetDockingMode()const
{
    return DT_SMART;
}

void VSMenuBar::SetPaneStyle(DWORD dwNewStyle)
{
    m_dwStyle = dwNewStyle &amp;amp; ~CBRS_GRIPPER;
}

BEGIN_MESSAGE_MAP(VSMenuBar, CMFCMenuBar)
    ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

void VSMenuBar::OnLButtonDown(UINT nFlags, CPoint point)
{
    CMFCMenuBar::OnLButtonDown(nFlags, point);
    SetCursor(theApp.LoadStandardCursor(IDC_ARROW));
}
&lt;/PRE&gt;
&lt;P&gt;使い方&lt;BR&gt;CMainFrame の CMFCMenuBar m_wndMenuBar； を下記のように VSMenuBar に入れ替えて下さい。&lt;/P&gt;
&lt;PRE class="brush: cpp" name="code"&gt;#include "VSMenuBar.h"

class CMainFrame : public CFrameWndEx
{
protected:  // コントロール バー用メンバ
 VSMenuBar         m_wndMenuBar;
&lt;/PRE&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/183848.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>CMFCListCtrl のヘッダーの描画がおかしい？</title><link>http://blogs.wankuma.com/bsim/archive/2009/12/05/183568.aspx</link><pubDate>Sat, 05 Dec 2009 15:03:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2009/12/05/183568.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/183568.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2009/12/05/183568.aspx#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/183568.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/183568.aspx</trackback:ping><description>&lt;P&gt;ダイアログベースでプロジェクトを作成し、CMFCListCtrlを配置するとデフォルトの状態では、下図のようにヘッダーの描画が、CListCtrlの場合と違います。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://naka.wankuma.com/blogimg/CMFCListCtrl_D6/2009120501.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=2009120501 border=0 alt=2009120501 src="http://bsim.wankuma.com/blogimg/2009/2009120601.png" width=244 height=137&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;これを直すには、使用するビジュアルマネージャを変更する必要があります。&lt;/P&gt;
&lt;P&gt;適当なところで設定してやれば、ヘッダーの描画が変わります。&lt;/P&gt;
&lt;P&gt;
&lt;DIV style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; FLOAT: none; PADDING-TOP: 0px" id=scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9c9e87eb-43f4-45c7-94ef-7ca76907ac11 class=wlWriterEditableSmartContent&gt;&lt;PRE class=c:nocontrols name="code"&gt;CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005));&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://naka.wankuma.com/blogimg/CMFCListCtrl_D6/2009120502.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=2009120502 border=0 alt=2009120502 src="http://bsim.wankuma.com/blogimg/2009/2009120602.png" width=244 height=137&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;知っていれば、大したことないですが、知らないとハマりそうです。&lt;/P&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/183568.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>bsim@wankuma.com</dc:creator><title>CMFCListCtrl アイテムのチェック状態を設定する</title><link>http://blogs.wankuma.com/bsim/archive/2009/11/02/182658.aspx</link><pubDate>Mon, 02 Nov 2009 09:01:00 GMT</pubDate><guid>http://blogs.wankuma.com/bsim/archive/2009/11/02/182658.aspx</guid><wfw:comment>http://blogs.wankuma.com/bsim/comments/182658.aspx</wfw:comment><comments>http://blogs.wankuma.com/bsim/archive/2009/11/02/182658.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/bsim/comments/commentRss/182658.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/bsim/services/trackbacks/182658.aspx</trackback:ping><description>&lt;p&gt;CMFCListCtrl でアイテムのチェック状態を設定する方法です。&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0c5ee2fe-58ad-46c2-957d-9e7ee5d404d9" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c:nocontrols"&gt;inline void SetCheckAllItems(CListCtrl *pLC, BOOL bCheck)
{
    const int MAX = pLC-&amp;gt;GetItemCount();
    for(int i = 0; i &amp;lt; MAX; ++i){
        pLC-&amp;gt;SetCheck(i, bCheck);
    }
}

template&amp;lt;typename InputIterator&amp;gt;
void SetCheckItems(CListCtrl *pLC, InputIterator begin, InputIterator end, BOOL bCheck)
{
    using namespace std::tr1;
    using namespace std::tr1::placeholders;
    for_each(begin, end, bind(&amp;amp;CListCtrl::SetCheck, pLC, _1, bCheck));
}

template&amp;lt;typename Container&amp;gt;
void SetCheckItems(CListCtrl *pLC, const Container &amp;amp;c, BOOL bCheck)
{
    SetCheckItems(pLC, c.begin(), c.end(), bCheck);
}&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;使い方&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9c29f974-498e-4a47-8acb-9afbd980916e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c:nocontrols"&gt;CMFCListCtrl lc;

SetCheckAllItems(&amp;amp;lc, FALSE);

vector&amp;lt;int&amp;gt; v;
v.push_back(0);
v.push_back(2);
SetCheckItems(&amp;amp;lc, v.begin(), v.end(), TRUE);

int a[3] = {0,3,5};
SetCheckItems(&amp;amp;lc, a, a+3, FALSE);&lt;/pre&gt;&lt;/div&gt;&lt;img src ="http://blogs.wankuma.com/bsim/aggbug/182658.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>