日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VS2010 MFC多文档中的工具栏CMFCToolBar停靠的问题

發布時間:2025/3/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS2010 MFC多文档中的工具栏CMFCToolBar停靠的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天遇到了一個問題,關于VS2010 MFC多文檔中的工具欄CMFCToolBar停靠的問題。
關于CMFCToolBar的一些介紹網上也有人介紹過,就不過多介紹了,直奔主題。

解決問題的關鍵點就在于,如想將CMFCToolBar正常停靠的話,需要在其Create的時候,加上后面的ID,使其ID值不能相同。

目的:
我一共有四個工具欄,想將它進行停靠在兩行,每行兩個工具欄。

做法:
1. 在InitInstance的適當地方加入

CleanState(_T("WorkSpace"));


2. 在CMainFrame的類定義中加入

CMFCToolBar m_wndToolBar2; CMFCToolBar m_wndToolBar3; CMFCToolBar m_wndToolBar4;


3. 在CMainFrame中的OnCreate中加入:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {...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(IDR_TOOLBAR3)){TRACE0("未能創建工具欄\n");return -1; // 未能創建 }if (!m_wndToolBar3.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar3.LoadToolBar(IDR_PROPERTIES)){TRACE0("未能創建工具欄\n");return -1; // 未能創建 }if (!m_wndToolBar4.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar4.LoadToolBar(IDR_SORT)){TRACE0("未能創建工具欄\n");return -1; // 未能創建 }...m_wndToolBar2.SetWindowText( _T("JunxToolBar2") );m_wndToolBar3.SetWindowText( _T("JunxToolBar3") );m_wndToolBar4.SetWindowText( _T("JunxToolBar4") );...m_wndToolBar2.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);m_wndToolBar3.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);m_wndToolBar4.EnableCustomizeButton(TRUE, ID_VIEW_CUSTOMIZE, strCustomize);...m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar3.EnableDocking(CBRS_ALIGN_ANY);m_wndToolBar4.EnableDocking(CBRS_ALIGN_ANY);...DockPaneLeftOf(&m_wndToolBar2, &m_wndToolBar); // 將m_wndToolBar2停靠在m_wndToolBar的左邊DockPane(&m_wndToolBar3); // 將m_wndToolBar3停靠在下一行DockPaneLeftOf(&m_wndToolBar4, &m_wndToolBar3); // 將m_wndToolBar4停靠在m_wndToolBar3的左邊 ... }

?

結果:
做法很簡單,但是出現一個奇怪現象,就是在下面的工具條竟然不見了。后來在菜單視圖->工具欄和停靠窗口->自定義下的工具欄選項卡中,點擊不見的
那個工具條發現,它竟然跑到了菜單欄上面去了,被菜單欄給擋住了,真是奇怪。

解決:
后來在微軟提供的sample中,默認是在
C:\Program Files\Microsoft Visual Studio 10.0\Samples\2052\VC2010Samples\C++\MFC\Visual C++ 2008 Feature Pack\VisualStudioDemo下
的VisualStudioDemo.sln工程
將VC2010Samples.zip解壓開即可
發現這工程竟然可以完整的停靠,然后開始了對比究竟有什么不同,終于被我發現,原來這例子在m_wndToolBar2的Create的時候傳遞了ID值,然后,我
也加上,竟奇跡般的解決了。顯示正常,四個工具欄兩行顯示,每行兩個。

Create部分的代碼修改如下:
如在每個Create的后面多加上兩個參數就好了: , CRect(1, 1, 1, 1), IDR_TOOLBAR3

if (!m_wndToolBar2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(1, 1, 1, 1), IDR_TOOLBAR3) ||!m_wndToolBar2.LoadToolBar(IDR_TOOLBAR3)){TRACE0("未能創建工具欄\n");return -1; // 未能創建 }if (!m_wndToolBar3.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(1, 1, 1, 1), IDR_PROPERTIES) ||!m_wndToolBar3.LoadToolBar(IDR_PROPERTIES)){TRACE0("未能創建工具欄\n");return -1; // 未能創建 }if (!m_wndToolBar4.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC, CRect(1, 1, 1, 1), IDR_SORT) ||!m_wndToolBar4.LoadToolBar(IDR_SORT)){TRACE0("未能創建工具欄\n");return -1; // 未能創建}

?


后記:
在極度奇怪和郁悶之后,后來發現最后那個ID的默認值是AFX_IDW_TOOLBAR,在查看AFX_IDW_TOOLBAR的定義時,發現了下面的如下一段,原來微軟在這
里告知了呀,真隱蔽,我是沒有找到,要不是那個例子,我想我還在郁悶中呢。
afxres.h從第117行開始,列出如下:

#define AFX_IDW_TOOLBAR 0xE800 // main Toolbar for window #define AFX_IDW_STATUS_BAR 0xE801 // Status bar window #define AFX_IDW_PREVIEW_BAR 0xE802 // PrintPreview Dialog Bar #define AFX_IDW_RESIZE_BAR 0xE803 // OLE in-place resize bar #define AFX_IDW_REBAR 0xE804 // COMCTL32 "rebar" Bar #define AFX_IDW_DIALOGBAR 0xE805 // CDialogBar// Note: If your application supports docking toolbars, you should // not use the following IDs for your own toolbars. The IDs chosen // are at the top of the first 32 such that the bars will be hidden // while in print preview mode, and are not likely to conflict with // IDs your application may have used succesfully in the past.

?


另外遇到一些小問題(自己記錄一下,方便以后查看,吼吼):
由于加入了導航窗格,故對注冊表進行一次清理,在InitInstance的適當地方加入
CleanState(_T("WorkSpace"));

?

目前對于此問題的所以然,還是有些模糊,請哪位大俠知道的,不吝賜教,3Q~

轉載于:https://www.cnblogs.com/junx1989/archive/2012/07/21/junx1989_20120721182415.html

總結

以上是生活随笔為你收集整理的VS2010 MFC多文档中的工具栏CMFCToolBar停靠的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。