4

MFCアプリケーションのルックアンドフィールを改善するために、MFCFeaturePackのいくつかのクラスを使用しようとしています。

私のアプリケーションでは、1つのCReBarオブジェクトを使用して3つの異なるツールバーをドッキングしています。このオブジェクトのクラスをCMFCReBarを使用するように更新しましたが、一部のビジュアルスタイルを使用すると見栄えが悪くなります。

パッケージとともにデプロイされたRebarTestの例でも発生するため、FeaturePackに問題があるようです。

これは、視覚スタイルをOffice 2007に変更しただけのサンプルアプリケーションのスクリーンショットです(コードではなくアプリメニューを使用)。

RebarTestサンプルアプリケーションのスクリーンショットhttp://img105.imageshack.us/img105/1057/rebartestep5.png

誰かがCMFCReBarをうまく使用しましたか?それを使用せずに同じことを達成する他の方法はありますか?

4

3 に答える 3

1

Paul DiLascia が CToolBar をロックするクラスを作成しました。私はそれを使用して、CMFCToolbar で動作するこのクラスを作成しました。そして、それをコピーして、CMFCMenuBar に対してまったく同じことを行うことができます。MFCToolBar を MFCMenuBar に変更するだけで完了です。

代替テキスト

class CLockedMFCToolBar : public CMFCToolBar
{
public:
    CLockedMFCToolBar() : CMFCToolBar() {}

protected:
    LRESULT CLockedMFCToolBar::WindowProc(UINT msg, WPARAM wp, LPARAM lp)
    {
        if ((msg==WM_LBUTTONDOWN || msg==WM_LBUTTONDBLCLK))
        {
            // Got click or double-click and toolbar is locked: if mouse in "dead
            // zone" then ignore the message--don't pass to control bar
            CPoint pt(lp);
            if (OnToolHitTest(pt, NULL) == -1)
                return 0; // return without handling: bypass control bar dragging!
        }
        // pass unhandled messages subclassed window--this is important!*/
        return CMFCToolBar::WindowProc(msg, wp, lp);
    }
};


//////////////////////////////
// in CMainFrame declaration
protected:
    CLockedMFCMenuBar m_wndMenuBar;
    CLockedMFCToolBar m_wndToolBar1;
    CLockedMFCToolBar m_wndToolBar2;


////////////////////////////
// in CMainFrame::OnCreate
if (!m_wndToolBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndToolBar1.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
{
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
}

if (!m_wndToolBar2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_wndToolBar2.LoadToolBar(theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME))
{
    TRACE0("Failed to create toolbar\n");
    return -1;      // fail to create
}

EnableDocking(CBRS_ALIGN_ANY);
m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar1.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndMenuBar);
DockPane(&m_wndToolBar2);
DockPane(&m_wndToolBar1);
DockPaneLeftOf(&m_wndToolBar1, &m_wndToolBar2);

m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() &
            ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));
m_wndToolBar1.SetPaneStyle(m_wndToolBar1.GetPaneStyle() &
            ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));
m_wndToolBar2.SetPaneStyle(m_wndToolBar2.GetPaneStyle() &
            ~(CBRS_GRIPPER | CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM | CBRS_BORDER_LEFT | CBRS_BORDER_RIGHT));
于 2009-02-06T00:20:42.763 に答える
0

Office 2007スタイルを使用しているときにも、いくつかの視覚的な問題に気づきました。少しバグがあるようです。代わりに他の1つを使用できますか?XPルナはかなり安定しているようです...

于 2009-01-15T16:08:41.737 に答える