亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mfc

?? 很好的MFC書籍
??
?? 第 1 頁 / 共 5 頁
字號:
  <P align=justify>{</P>
  <P align=justify>ASSERT_VALID(pParentWnd); // must have a parent</P>
  <P align=justify>ASSERT (!((dwStyle &amp; CBRS_SIZE_FIXED) &amp;&amp;</P>
  <P align=justify>(dwStyle &amp; CBRS_SIZE_DYNAMIC)));</P>
  <P align=justify></P>
  <P align=justify>// 保存dwStyle指定的CBRS_風格</P>
  <P align=justify>m_dwStyle = dwStyle;</P>
  <P align=justify>if (nID == AFX_IDW_TOOLBAR)</P>
  <P align=justify>m_dwStyle |= CBRS_HIDE_INPLACE;</P>
  <P align=justify></P>
  <P align=justify>//去掉參數dwStyle包含的CBRS_風格</P>
  <P align=justify>dwStyle &amp;= ~CBRS_ALL;</P>
  <P align=justify>//設置窗口風格</P>
  <P align=justify>dwStyle |= </P>
  <P align=justify>CCS_NOPARENTALIGN|CCS_NOMOVEY|CCS_NODIVIDER|CCS_NORESIZE;</P>
  <P align=justify></P>
  <P align=justify>//初始化通用控制,可以導致InitCommonControl的調用</P>
  <P align=justify>VERIFY(AfxDeferRegisterClass(AFX_WNDCOMMCTLS_REG));</P>
  <P align=justify></P>
  <P align=justify>//創建窗口,將調用PreCreateWindow,OnCreate, OnNcCreate等</P>
  <P align=justify>CRect rect; rect.SetRectEmpty();</P>
  <P align=justify>if (!CWnd::Create(TOOLBARCLASSNAME, NULL, dwStyle, </P>
  <P align=justify>rect, pParentWnd, nID))</P>
  <P align=justify>return FALSE;</P>
  <P align=justify></P>
  <P align=justify>// Note: Parent must resize itself for control bar to be 
  resized</P>
  <P align=justify></P>
  <P align=justify>return TRUE;</P>
  <P align=justify>}</P>
  <P align=justify>其中:</P>
  <P align=justify>Create函數的參數1表示工具條的父窗口。參數2指定窗口風格和CBRS_風格,缺省值為 WS_CHILD | 
  WS_VISIBLE | 
  CBRS_TOP,其中WS_CHILD和WS_VISIBLE是窗口風格,CBRS_TOP是CBRS_風格。參數3指定工具條ID,缺省值為AFX_IDW_TOOLBAR(0X0E800或者59392)。如果還有多個工具欄要顯示,在創建它們時則必須給每個工具欄指明ID。</P>
  <P 
  align=justify>首先,Create函數把參數2(dwStyle)指定的窗口風格和CBRS_風格分離出來,窗口風格保留在dwStyle中,CBRS_風格保存到成員變量m_dwStyle中。CToolBar::PreCreateWindow將進一步修改這些風格。</P>
  <P 
  align=justify>接著,Create函數調用了函數AfxDeferRegisterClass。它如果沒有注冊TOOLBARCLASSNAME表示的“窗口類”,就注冊該類;否則,返回TRUE,表示已經注冊。TOOLBARCLASSNAME表示的字符串是“ToolbarWindow32”,即“窗口類”名稱。</P>
  <P align=justify>然后,調用CWnd::Create(7個參數)使用“ToolbarWindow32”“窗口類”創建工具欄。</P>
  <P 
  align=justify>Create在創建窗口的過程中,用MFC的標準窗口過程取代原來的窗口過程,如同CFormView和CDialog窗口創建時窗口過程被取代一樣,并發送WM_CREATE和WM_NCCREATE消息。</P>
  <P 
  align=justify>至于添加向工具欄添加按鈕,則由函數LoadToolBar完成。在分析LoadToolBar函數之前,先討論OnCreate、OnNcCreate等函數。</P>
  <P align=justify></P>
  <LI>處理WM_CREATE消息 
  <P></P>
  <P align=justify>CControlBar提供了消息處理函數OnCreate來處理WM_CREATE消息。</P>
  <P align=justify>int CControlBar::OnCreate(LPCREATESTRUCT lpcs)</P>
  <P align=justify>{</P>
  <P align=justify>//調用基類的實現</P>
  <P align=justify>if (CWnd::OnCreate(lpcs) == -1)</P>
  <P align=justify>return -1;</P>
  <P align=justify>//針對工具欄,是否有Tooltip特性</P>
  <P align=justify>if (m_dwStyle &amp; CBRS_TOOLTIPS)</P>
  <P align=justify>EnableToolTips();</P>
  <P align=justify>//得到父窗口,并添加自身到其控制條列表中</P>
  <P align=justify>CFrameWnd *pFrameWnd = (CFrameWnd*)GetParent();</P>
  <P align=justify>if (pFrameWnd-&gt;IsFrameWnd())</P>
  <P align=justify>{</P>
  <P align=justify>m_pDockSite = pFrameWnd;</P>
  <P align=justify>m_pDockSite-&gt;AddControlBar(this);</P>
  <P align=justify>}</P>
  <P align=justify>return 0;</P>
  <P align=justify>}</P>
  <P align=justify>如果需要支持Tooltips,則OnCreate調用EnableTooltips。</P>
  <P 
  align=justify>m_pDockSite是CControlBar的和泊位相關的成員變量,這里把它初始化為擁有工具欄的父邊框窗口,該邊框窗口把控制條加入其控制條列表m_listControlBars中。</P>
  <P 
  align=justify>在處理WM_CREATE之前,派生類先處理消息WM_NCCREAE。例如,CToolBar覆蓋了OnNcCreate函數。</P>
  <P align=justify></P>
  <LI>處理WM_NCCREATE消息 
  <P></P>
  <P align=justify>CToolBar對WM_NCCREATE消息的處理如下:</P>
  <P align=justify>BOOL CToolBar::OnNcCreate(LPCREATESTRUCT lpCreateStruct)</P>
  <P align=justify>{</P>
  <P align=justify>if (!CControlBar::OnNcCreate(lpCreateStruct))</P>
  <P align=justify>return FALSE;</P>
  <P align=justify>// if the owner was set before the toolbar was created, set 
  it now</P>
  <P align=justify>if (m_hWndOwner != NULL)</P>
  <P align=justify>DefWindowProc(TB_SETPARENT, (WPARAM)m_hWndOwner, 0);</P>
  <P align=justify></P>
  <P align=justify>DefWindowProc(TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 
  0);</P>
  <P align=justify>return TRUE;</P>
  <P align=justify>}</P>
  <P 
  align=justify>CToolBar覆蓋CcontrolBar的該函數用來設置工具條的所屬窗口和描述工具條按鈕結構的大小,這兩個動作都是通過給工具條窗口發送消息來實現的。因為這些消息被送給控制窗口類的窗口過程(Windows提供的)來處理,所以直接調用DefWindowProc,省卻了消息發送的過程。</P>
  <P align=justify>在控制窗口創建之后,對于工具條來說,下一步就是向工具欄添加按鈕。</P>
  <P align=justify></P>
  <LI>向工具欄添加按鈕 
  <P></P>
  <P align=justify>通過函數LoadToolBar完成向工具欄添加按鈕的任務,其實現如下:</P>
  <P align=justify>BOOL CToolBar::LoadToolBar(LPCTSTR lpszResourceName)</P>
  <P align=justify>{</P>
  <P align=justify>ASSERT_VALID(this);</P>
  <P align=justify>ASSERT(lpszResourceName != NULL);</P>
  <P align=justify></P>
  <P align=justify>//查找并確認按鈕位圖、字符串等資源的位置</P>
  <P align=justify>HINSTANCE hInst = AfxFindResourceHandle(lpszResourceName, 
  RT_TOOLBAR);</P>
  <P align=justify>HRSRC hRsrc = ::FindResource(hInst, lpszResourceName, 
  RT_TOOLBAR);</P>
  <P align=justify>if (hRsrc == NULL)</P>
  <P align=justify>return FALSE;</P>
  <P align=justify></P>
  <P align=justify>//鎖定資源</P>
  <P align=justify>HGLOBAL hGlobal = LoadResource(hInst, hRsrc);</P>
  <P align=justify>if (hGlobal == NULL)</P>
  <P align=justify>return FALSE;</P>
  <P align=justify></P>
  <P align=justify>CToolBarData* pData = 
  (CToolBarData*)LockResource(hGlobal);</P>
  <P align=justify>if (pData == NULL)</P>
  <P align=justify>return FALSE;</P>
  <P align=justify>ASSERT(pData-&gt;wVersion == 1);</P>
  <P align=justify></P>
  <P align=justify>//復制與各個位圖對應的命令ID到數組pItem</P>
  <P align=justify>UINT* pItems = new UINT[pData-&gt;wItemCount];</P>
  <P align=justify>for (int i = 0; i &lt; pData-&gt;wItemCount; i++)</P>
  <P align=justify>pItems[i] = pData-&gt;items()[i];</P>
  <P align=justify>//添加按鈕到工具欄,指定各個按鈕對應的ID</P>
  <P align=justify>BOOL bResult = SetButtons(pItems, pData-&gt;wItemCount);</P>
  <P align=justify>delete[] pItems;</P>
  <P align=justify></P>
  <P align=justify>//設置按鈕的位圖</P>
  <P align=justify>if (bResult)</P>
  <P align=justify>{</P>
  <P align=justify>// set new sizes of the buttons</P>
  <P align=justify>CSize sizeimage(pData-&gt;wWidth, pData-&gt;wHeight);</P>
  <P align=justify>CSize sizeButton(pData-&gt;wWidth + 7, pData-&gt;wHeight + 
  7);</P>
  <P align=justify>SetSizes(sizeButton, sizeimage);</P>
  <P align=justify></P>
  <P align=justify>// load bitmap now that sizes are known by the toolbar 
  control</P>
  <P align=justify>bResult = LoadBitmap(lpszResourceName);</P>
  <P align=justify>}</P>
  <P align=justify></P>
  <P align=justify>UnlockResource(hGlobal);</P>
  <P align=justify>FreeResource(hGlobal);</P>
  <P align=justify></P>
  <P align=justify>return bResult;</P>
  <P align=justify>}</P>
  <P 
  align=justify>LoadToolBar函數的參數指定了資源。ToolBar資源的類型是RT_TOOLBAR,ToolBar位圖資源的類型是RT_BITMAP。</P>
  <P 
  align=justify>在RT_TOOLBAR類型的資源讀入內存之后,可以用CToolBarData結構描述。一個這樣的結構包括了ToolBar資源的如下信息:</P>
  <P align=justify>工具條位圖的版本,寬度,高度,個數,各個位圖對應的命令ID。</P>
  <P 
  align=justify>然后,LoadToolBar把這些命令ID被復制到數組pItem中;根據位圖寬度、高度形成按鈕尺寸sizeButton和位圖尺寸sizeimage。</P>
  <P 
  align=justify>接著,調用SetBottons添加按鈕到工具欄,把各個按鈕和命令ID對應起來;調用SetSizes設置按鈕和位圖的尺寸大小;調用LoadBitmap添加或者取代工具條的位圖列表。這些動作都是調用工具欄“窗口類”的窗口過程完成的。例如,SetButtons的實現:</P>
  <P align=justify>BOOL CToolBar::SetButtons(const UINT* lpIDArray, int 
  nIDCount)</P>
  <P align=justify>{</P>
  <P align=justify>ASSERT_VALID(this);</P>
  <P align=justify>ASSERT(nIDCount &gt;= 1); // must be at least one of them</P>
  <P align=justify>ASSERT(lpIDArray == NULL ||</P>
  <P align=justify>AfxIsValidAddress(lpIDArray, sizeof(UINT) * nIDCount, 
  FALSE));</P>
  <P align=justify></P>
  <P align=justify>//首先,刪除工具條中現有的按鈕</P>
  <P align=justify>int nCount = (int)DefWindowProc(TB_BUTTONCOUNT, 0, 0);</P>
  <P align=justify>while (nCount--)</P>
  <P align=justify>VERIFY(DefWindowProc(TB_DELETEBUTTON, 0, 0));</P>
  <P align=justify></P>
  <P align=justify>if (lpIDArray != NULL)//命令ID數組非空</P>
  <P align=justify>{</P>
  <P align=justify>//添加新按鈕</P>
  <P align=justify>TBBUTTON button; memset(&amp;button, 0, 
sizeof(TBBUTTON));</P>
  <P align=justify>int iimage = 0;</P>
  <P align=justify>for (int i = 0; i &lt; nIDCount; i++)</P>
  <P align=justify>{</P>
  <P align=justify>button.fsState = TBSTATE_ENABLED;</P>
  <P align=justify>if ((button.idCommand = *lpIDArray++) == 0)</P>
  <P align=justify>{</P>
  <P align=justify>//按鈕之間分隔</P>
  <P align=justify>button.fsStyle = TBSTYLE_SEP;</P>
  <P align=justify>//按鈕之間隔8個像素</P>
  <P align=justify>button.iBitmap = 8;</P>
  <P align=justify>}</P>
  <P align=justify>else</P>
  <P align=justify>{</P>
  <P align=justify>//有位圖和命令ID的按鈕</P>
  <P align=justify>button.fsStyle = TBSTYLE_BUTTON;</P>
  <P align=justify>button.iBitmap = iimage++;//設置位圖索引</P>
  <P align=justify>}</P>
  <P align=justify>//添加按鈕</P>
  <P align=justify>if (!DefWindowProc(TB_ADDBUTTONS, 1, 
(LPARAM)&amp;button))</P>
  <P align=justify>return FALSE;</P>
  <P align=justify>}</P>
  <P align=justify>}</P>
  <P align=justify>else//命令ID數組空,添加空按鈕</P>
  <P align=justify>{</P>
  <P align=justify>TBBUTTON button; memset(&amp;button, 0, 
sizeof(TBBUTTON));</P>
  <P align=justify>button.fsState = TBSTATE_ENABLED;</P>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产色综合久久| 中文字幕在线一区二区三区| 成人性生交大片免费看在线播放| 亚洲精品第1页| 欧美r级在线观看| 在线影院国内精品| 成人av在线资源网站| 日本最新不卡在线| 亚洲免费av在线| 国产亚洲人成网站| 欧美一区二区三区四区久久| 99国产精品一区| 国产精品一区一区| 免费成人美女在线观看| 亚洲精品中文在线| 中文字幕二三区不卡| 精品久久久久久久久久久院品网| 欧美无乱码久久久免费午夜一区| 成人av网址在线| 国产福利91精品一区| 美女视频黄频大全不卡视频在线播放| 亚洲在线成人精品| 综合色天天鬼久久鬼色| 欧美国产激情二区三区 | 99视频精品在线| 精品一区二区三区在线播放视频| 午夜精品久久久久久久久| 成人欧美一区二区三区在线播放| 国产欧美日韩在线观看| 久久久国产精华| 精品动漫一区二区三区在线观看| 日韩一区二区在线观看视频播放| 欧美精品久久99久久在免费线| 欧美亚洲综合一区| 欧美日韩在线不卡| 在线精品视频小说1| 一本大道久久精品懂色aⅴ| 97久久人人超碰| jiyouzz国产精品久久| 99在线视频精品| 色婷婷激情久久| 欧美亚洲尤物久久| 欧美蜜桃一区二区三区| 欧美精品1区2区3区| 亚洲一线二线三线视频| 夜夜嗨av一区二区三区中文字幕 | 亚洲国产精品久久人人爱蜜臀 | 亚洲欧洲精品一区二区精品久久久| 国产亚洲成aⅴ人片在线观看| 久久丝袜美腿综合| 久久精品视频一区二区| 亚洲国产精品精华液ab| 亚洲视频1区2区| 亚洲成人激情av| 日韩成人免费看| 久久狠狠亚洲综合| 国产精品888| 99久久99久久久精品齐齐| 日本韩国欧美国产| 欧美日韩国产精品成人| 精品对白一区国产伦| 国产精品拍天天在线| 亚洲一区二区精品久久av| 日日夜夜精品视频免费| 国产自产高清不卡| 91丨porny丨户外露出| 欧美高清一级片在线| 久久久精品蜜桃| 亚洲欧美日韩国产成人精品影院| 亚洲高清免费在线| 精品中文字幕一区二区小辣椒| 国产aⅴ综合色| 色婷婷久久99综合精品jk白丝| 欧美日韩高清一区| 久久精品水蜜桃av综合天堂| 亚洲精品免费视频| 久久黄色级2电影| 99re66热这里只有精品3直播| 7777精品伊人久久久大香线蕉最新版| 精品国内片67194| 亚洲免费观看高清| 免费不卡在线观看| 99精品视频一区二区| 欧美日韩电影一区| 中文欧美字幕免费| 日韩精品欧美成人高清一区二区| 国产宾馆实践打屁股91| 欧美日韩久久久久久| 国产婷婷色一区二区三区| 亚洲国产日韩综合久久精品| 国产美女视频91| 欧美日韩国产另类一区| 日本一区二区三区dvd视频在线| 亚洲午夜国产一区99re久久| 国产69精品久久久久毛片| 91精品午夜视频| 悠悠色在线精品| 国产精品99久久久久久久女警| 欧美在线你懂得| 中文字幕一区二区三区不卡在线| 蜜桃av一区二区| 欧美午夜精品久久久| 国产精品视频一二| 久久机这里只有精品| 亚洲色图.com| 丁香婷婷综合色啪| 日韩欧美激情四射| 日韩在线卡一卡二| 欧美视频一二三区| 亚洲欧美怡红院| 成人午夜激情视频| 久久伊人蜜桃av一区二区| 男人的j进女人的j一区| 欧美美女一区二区三区| 亚洲卡通动漫在线| 91一区二区在线| 中文字幕免费观看一区| 国产中文字幕一区| 精品久久久久久久久久久久久久久久久 | 精品久久久久久久久久久久久久久 | 久久九九国产精品| 秋霞影院一区二区| 91精品国产91久久久久久一区二区| 亚洲乱码国产乱码精品精的特点| 国产成人av在线影院| 欧美精品一区二区在线播放| 爽爽淫人综合网网站| 欧美日韩在线播放三区| 樱花草国产18久久久久| 91片黄在线观看| 亚洲精品乱码久久久久久黑人| 丁香另类激情小说| 国产精品素人视频| 菠萝蜜视频在线观看一区| 国产精品久久久久久久久免费桃花 | 久久久99久久精品欧美| 狠狠网亚洲精品| 欧美精品一区二区三区四区 | 成人免费看黄yyy456| 国产亚洲va综合人人澡精品 | 91视频.com| 中文字幕一区三区| 99久久精品免费| 亚洲综合激情网| 欧美四级电影在线观看| 视频一区视频二区中文| 欧美va亚洲va国产综合| 国产在线播精品第三| 国产欧美一区视频| 色系网站成人免费| 亚洲国产精品久久人人爱蜜臀| 欧美日产在线观看| 久久精品国产免费| 久久久久99精品国产片| 91在线免费播放| 亚洲成人av福利| 欧美mv日韩mv亚洲| 成人国产精品免费观看视频| 亚洲欧美日韩小说| 在线播放亚洲一区| 国产一区二区三区黄视频 | 国产成人夜色高潮福利影视| 国产亚洲福利社区一区| 色噜噜久久综合| 蜜乳av一区二区| 中文一区一区三区高中清不卡| 色哟哟欧美精品| 美国三级日本三级久久99| 亚洲国产精品国自产拍av| 91成人网在线| 激情图片小说一区| 亚洲男人天堂av| 日韩精品一区二区三区视频| 丁香一区二区三区| 日韩一区精品视频| 欧美韩国日本综合| 欧美日本一区二区三区四区| 国产精品一区2区| 亚洲午夜一区二区| 国产欧美一区二区精品久导航 | 91麻豆精品国产91久久久| 国产精品资源网站| 亚洲va国产天堂va久久en| 久久精品无码一区二区三区| 欧美日韩1234| av电影在线观看一区| 日韩av中文字幕一区二区三区| 欧美激情一区二区三区四区| 欧美人与性动xxxx| 本田岬高潮一区二区三区| 免费看黄色91| 亚洲免费观看高清完整版在线观看| 精品免费国产一区二区三区四区| 色综合天天性综合| 另类成人小视频在线| 亚洲国产乱码最新视频| 中文字幕亚洲区| 久久影视一区二区| 日韩三级免费观看| 欧美日韩电影在线播放|