MFC中CWnd類及其派生類對(duì)話框、消息處理,、窗口操作http://hi.baidu.com/xiaorida21/blog/item/8d8eb77a22eedee52e73b39e.html CWnd類 我們?cè)谄聊簧峡吹降乃袑?duì)象都和窗口有關(guān),,它們或者派生于CWnd,屬繼承關(guān)系,,如對(duì)話框,、工具欄、狀態(tài)欄,、子控件,;或者被CWnd合成,屬服務(wù)員與服務(wù)對(duì)象關(guān)系,,如圖標(biāo),、菜單、顯示設(shè)備,。 CWnd類封裝的窗口操作主要包含窗口的創(chuàng)建和銷毀,、操作窗口風(fēng)格、操作窗口狀態(tài),、窗口子類化,、獲取指定窗口等。 當(dāng)然,,CWnd還實(shí)現(xiàn)了其他功能: 1,、繪制窗口 GetDC()//取得客戶區(qū)顯示設(shè)備上下文 GetWindowsDC()//取得整個(gè)窗口的顯示設(shè)備上下文 ReleaseDC() BeginPaint() EndPaint() PrintClient() RedrawWindow()//重繪客戶區(qū)的某區(qū)域 2、操作窗口子控件 GetDlgItem():取得(臨時(shí)的)控件對(duì)象指針 SetDlgItemText()和GetDlgItemText():設(shè)置,、取得控件標(biāo)題 SubclassDlgItem():將控件句柄與相應(yīng)類相關(guān)聯(lián) DlgDirList()和DlgDirListComboBox():以文件列表或目錄列表填充(組合框)列表框 CheckDlgButton()和CheckRadioButton():設(shè)置復(fù)選框(單選按鈕)狀態(tài),。 GetNextDlgTabItem():取得下一個(gè)WS_TABSTOP風(fēng)格控件 3、窗口定時(shí)器 SetTimer():設(shè)置定時(shí)器 KillTimer():銷毀定時(shí)器 4,、窗口消息的相關(guān)函數(shù) GetCurrentMessage():取得當(dāng)前被處理的消息 PreTranslateMessage():可重載的虛函數(shù),。被UI線程的消息循環(huán)調(diào)用,可以過濾窗口收到的消息,,過濾出的消息得以分發(fā) SendMessage():向本窗口發(fā)送消息,。不通過消息循環(huán),直接調(diào)用窗口函數(shù)處理消息,。窗口函數(shù)執(zhí)行完畢,,該函數(shù)才返回 PostMessage():向本窗口寄送消息,。將消息放入消息隊(duì)列,立即返回,。 Default():為所有的窗口消息提供默認(rèn)處理,。對(duì)無需處理的消息或希望默認(rèn)處理的消息,可以使用Default() 5,、默認(rèn)的消息處理函數(shù) 在實(shí)際的編程中,,很少調(diào)用Default(),因?yàn)獒槍?duì)大部分消息,,CWnd類已經(jīng)定義了相應(yīng)得處理函數(shù),,封裝了Default()的調(diào)用。同時(shí),,有一些特殊的消息,,如WM_SYSCOLORCHANGE,僅執(zhí)行系統(tǒng)級(jí)的處理是不夠的,,框架必須針對(duì)消息完成一些例行的操作,。
//////////////////////////////////////////////// http://hi.baidu.com/xiaorida21/blog/item/fb89bb29ac9a74f698250a6a.html 、CFrameWnd類 在編寫文檔/視圖結(jié)構(gòu)的應(yīng)用程序時(shí),,CFrameWnd作為主窗口管理視圖和文檔對(duì)象,。視圖對(duì)象和控制條都成為CFrameWnd的子窗口,它們分享客戶區(qū),,其位置被CFrameWnd有效的安排,。 CFrameWnd的創(chuàng)建 Creage()和LoadFrame()。前者主要?jiǎng)?chuàng)建窗口,,而后者先組織參數(shù),,再調(diào)用前者。 LoadFrame()的形參簡(jiǎn)潔,,在創(chuàng)建窗口的同時(shí),,完成許多主窗體的初始化工作。 2,、管理視圖對(duì)象 視圖無非是主框架窗口的一個(gè)ID為AFX_IDW_PANE_FIRST,,帶有邊框的子窗口,由CFrameWnd封裝并創(chuàng)建的,。成員函數(shù)CFrameWnd::OnCreateClient()用于創(chuàng)建視圖窗口,,它是在該類的WM_CREATE消息處理函數(shù)中被調(diào)用的。一個(gè)主窗口可能包含多個(gè)視圖,,它們或者是通過CSplitterWnd在客戶區(qū)拆分創(chuàng)建的,,或者直接在客戶區(qū)以子窗口形式創(chuàng)建。 在主窗口創(chuàng)建后,視圖也創(chuàng)建了,,一般要調(diào)用CFrameWnd::InitialUpdateFrame()進(jìn)行初始化,該函數(shù)設(shè)置第一個(gè)視圖ID為AFX_IDW_PANE_FIRST,。 3,、管理控制條 主窗口有豐富的控制條,它們都是由CControlBar派生的,。 CFrameWnd封裝了對(duì)這些的操作,,如: EnableDockinng(); 4、發(fā)送命令消息 命令消息是指菜單,、工具欄,、加速鍵及命令按鈕向其所在窗口發(fā)送的WM_COMMAND消息。主框架窗口通常包含應(yīng)用程序的系統(tǒng)主菜單和工具欄,,而加速鍵往往在LoadFrame()中裝入主窗口,,它們向主窗口發(fā)送命令消息。 處WM_COMMAND外,,其他以WM_開頭的消息叫窗口消息,,窗口消息與某一窗口緊密相關(guān),應(yīng)該由接收消息的窗口處理,。而命令消息往往與具體的窗口無關(guān),。 CCmdTarget類定義了一個(gè)OnCmdMsg()虛擬函數(shù),用于處理命令消息,,派生類可以重載它,。CFrameWnd就是通過重載該函數(shù)實(shí)現(xiàn)命令消息的分發(fā):首先將命令消息傳給活動(dòng)視圖,如果視圖沒有處理,,它將被傳送給關(guān)聯(lián)的文檔對(duì)象,,視圖或者文檔都沒有處理該消息時(shí),即它們沒有建立該消息的消息映射,,則由主窗口本身處理,,若主窗口沒有處理,最后嘗試應(yīng)用類,,如果還是沒有處理,,該消息就由默認(rèn)過程處理。 注意:主窗口直接調(diào)用視圖,、應(yīng)用類的OnCmdMsg()虛函數(shù)處理命令消息,,并沒有通過SendMessage()或PostMessage()將消息轉(zhuǎn)發(fā)。OnCmdMsg()僅在類中搜索消息映射表,,查找該命令的處理函數(shù),。找不到則返回。所以視圖類只有通過消息映射,才能處理主窗口轉(zhuǎn)發(fā)的命令消息,。如果使用CView::WindowProc()捕捉該類消息,,會(huì)一無所獲。 5,、必要的消息處理 為了管理控制條和視圖,,CFrameWnd為幾個(gè)窗口消息建立了消息映射,專門進(jìn)行處理,。 OnInitMenuPopup();
//////////////////////////////////////////////////////////// http://hi.baidu.com/xiaorida21/blog/item/9cbd5507fe6c73c57a894751.html CView類 1,、關(guān)聯(lián)文檔對(duì)象 一個(gè)視圖對(duì)象只關(guān)聯(lián)一個(gè)文檔對(duì)象,但一個(gè)文檔對(duì)象可以關(guān)聯(lián)多個(gè)視圖,,每個(gè)視圖對(duì)象以不同的形式表示文檔數(shù)據(jù),。 在文檔/視圖框架程序中,文檔對(duì)象總是在視圖之前建立,,而在視圖的WM_CREATE消息處理函數(shù)中,,建立了它與文檔對(duì)象的關(guān)聯(lián),m_pDocument->AddView(this),,將當(dāng)前視圖加入文檔對(duì)象的視圖列表中,,因?yàn)橐粋€(gè)文檔可關(guān)聯(lián)多個(gè)視圖。同時(shí),,視圖類定義了成員函數(shù)GetDocument(),返回文檔對(duì)象的指針,。視圖總是在文檔對(duì)象之前銷毀,在視圖析構(gòu)函數(shù)中,,與文檔對(duì)象接觸關(guān)聯(lián),,m_pDocument->RemoveView(this)。 2,、視圖的繪制 窗口繪制工作總是在WM_PAINT消息處理中進(jìn)行的,,窗口需要繪制時(shí),它會(huì)收到系統(tǒng)發(fā)來的WM_PAINT消息,。繪制過程,,我們需要準(zhǔn)備顯示設(shè)備句柄,最后要釋放句柄,。但是我們無需加載WM_PAINT消息處理函數(shù)OnPaint(),,我們只需要在OnDraw()繪制,并且OnDraw()準(zhǔn)備了一個(gè)顯示設(shè)備,,最后也無需釋放,,這些都由OnPaint()為我們準(zhǔn)備的。 OnDraw()在視圖基類CView中定義為純虛函數(shù):virtual void OnDraw(CDC* pDC) = 0; 所以CView是抽象基類,,不能實(shí)例化,,而派生類必須重載OnDraw(),。 3、虛函數(shù)virtual void OnUpdate(CView* pSender, LPARAM, CObject*) 當(dāng)文檔數(shù)據(jù)發(fā)生變化時(shí),,文檔對(duì)象調(diào)用CDocument::UpdateAllView()通知所有視圖,,視圖的OnUpdate()成員被調(diào)用。所以,,重載的OnUpdate()應(yīng)該能夠根據(jù)需要,,將文檔數(shù)據(jù)的變化反映在視圖上。而CView::OnUpdate()只是簡(jiǎn)單的使客戶區(qū)無效,,導(dǎo)致客戶區(qū)重畫。 4,、虛函數(shù)virtual void OnInitialUpdate() 在初始創(chuàng)建,、調(diào)用OnCreate()之后,或者在File|New,、File|Open命令之后被框架調(diào)用,。基類CView::OnInitalUpdate()只是簡(jiǎn)單的調(diào)用OnUpdate(),,可以重載它完成初始化工作,,但注意,它可能被多次調(diào)用,。 5,、虛函數(shù)virtual void CalcWindowRect(LPRECT lpClientRect, UNIT nAdjustType) 每當(dāng)主框架窗口的客戶區(qū)尺寸發(fā)生變化,或者控制條的位置發(fā)生變化,,需要重新排列客戶區(qū)時(shí),,調(diào)用該函數(shù),根據(jù)視圖客戶區(qū)尺寸計(jì)算視圖窗口的尺寸,。 我們知道,,排列主窗口客戶區(qū)是由CFrameWnd::RecalcLayout()完成的。顯然,,視圖的CalcWindowRect()函數(shù)也是由它觸發(fā)調(diào)用的,。主窗口的客戶區(qū)尺寸減掉所有控制條占用的都分,剩下的區(qū)域分給視圖,,這部分區(qū)域作為實(shí)參傳入CalcWindowRect(),。在CalcWindowRect()函數(shù)內(nèi),需要計(jì)算視圖窗口的尺寸,。 6,、虛函數(shù)virtual void PostNcDestroy() 在視圖窗口關(guān)閉時(shí)調(diào)用的成員函數(shù),它與CFrameWnd::PostNcDestroy完成相同的功能,,即刪除視圖對(duì)象,。 void CView::PostNcDestroy() {delete this;} 這樣,,可以不必關(guān)心視圖的釋放工作,即使它在堆中構(gòu)造,。 7,、虛函數(shù)virtual BOOL OnCmdMsg(UINT, int, void*, AFX_CMDHANDLERINFO*) Cview::OnCmdMsg首先查找自身的命令消息映射,若本身沒有處理該消息,,將機(jī)會(huì)留給與其關(guān)聯(lián)的文檔對(duì)象,。 8、虛函數(shù)virtual void OnActivateView(BOOL, CView*, CView*) 當(dāng)視圖被激活為活動(dòng)視圖,,或由活動(dòng)轉(zhuǎn)為非活動(dòng)時(shí),,調(diào)用該函數(shù)通知視圖。CView::OnActivateView只是實(shí)現(xiàn)設(shè)置該視圖為焦點(diǎn),。
////////////////////////////////////////////////////// http://hi.baidu.com/xiaorida21/blog/item/24b83838f7c3d9cad4622556.html CDialog類 對(duì)話框時(shí)通過對(duì)話框模版建立起來的,,只需要一個(gè)以模版為實(shí)參的創(chuàng)建命令,如CDialog::Create,,就可以完成對(duì)話框窗口及其子控件的創(chuàng)建工作,,所有創(chuàng)建細(xì)節(jié)都由對(duì)話框模版來指示。 模態(tài)對(duì)話框的消息循環(huán) 當(dāng)調(diào)用對(duì)話框的Domodal()成員后,,就創(chuàng)建了模態(tài)對(duì)話框,。它可以禁止它所屬的主窗口,以及該主窗口的子窗口(除了重疊窗口和普通彈出窗口),。 1,、模態(tài)對(duì)話框的創(chuàng)建和模式循環(huán) 其實(shí)“模態(tài)”不是對(duì)話框的專利,模態(tài)特性封裝與CWnd中,,如果采取與模態(tài)對(duì)話框相同的創(chuàng)建方法,,普通窗口也可以使模態(tài)的。這個(gè)方法就是在創(chuàng)建窗體后,,調(diào)用CWnd::RunModalLoop()模式循環(huán)函數(shù),。它與CWnd::Run()相似,也是一個(gè)消息循環(huán)泵,,而且CWnd::RunModalLoop()得消息處理還要復(fù)雜一些,。 CDialog::DoModal()函數(shù)的操作過程:首先AfxGetResourceHandle()和LoadResource(hInst,hResource)裝入對(duì)話框資源,在建立模版對(duì)話框之前,,::EnableWindow(hWndParent, FALSE)禁止父窗口的鼠標(biāo)和鍵盤輸入,,禁止父窗口也間接的禁止父窗口的下屬窗口,但不包括下屬的重疊窗口和普通彈出窗口,。CreateDlgIndirect(lpDialog Template, CWnd::FromHandl(hWndParent), hInst))通過資源模版創(chuàng)建對(duì)話框及其子控件,,創(chuàng)建成功后,進(jìn)入模式循環(huán)RunModalLoop(),,當(dāng)用戶選擇IDOK和IDCANCEL時(shí),,模式循環(huán)退出,,對(duì)話框?qū)⒈讳N毀。::EnableWindow(hWndParent, TRUE)恢復(fù)父窗口的工作狀態(tài),,間接地恢復(fù)其兄弟窗口,。SetActiveWindows(hWndParent)激活父窗口,DestroyWindow()銷毀該對(duì)話框,。 RunModalLoop()實(shí)現(xiàn)的消息循環(huán):這個(gè)消息循環(huán)完成UI線程消息循環(huán)(由CWinThread::Run封裝)的全部功能,,同時(shí)為處理模態(tài)窗口的特殊消息,添加了必要的處理代碼,。模態(tài)窗口建立后,,就進(jìn)入這個(gè)循環(huán),其中的消息循環(huán)泵暫時(shí)代替了UI線程的消息循環(huán)泵,,為所有窗口提取并分發(fā)信息,。但所有被禁止的窗口無法接收鼠標(biāo)和鍵盤的消息,除非使用了PostMessage()命令,。 RunModalLoop()的實(shí)現(xiàn)過程:RunModalLoop(DWORD dwFlags)形參可以使地下三個(gè)的組合:MLF_NOIDLEMSG(消息隊(duì)列空閑時(shí),不發(fā)送WM_ENTERIDLE消息給當(dāng)前主窗口) MLF_NOKICKIDLE(消息隊(duì)列空閑時(shí),,不發(fā)送WM_KICKIDLE消息給當(dāng)前模態(tài)對(duì)話框) MLF_SHOWONIDLE(消息隊(duì)列空閑時(shí),,刷新顯示當(dāng)前對(duì)話框(僅一次)) int CWnd::RunModalLoop(DWORD dwFlags) //m_nFlags值為WF_MODALLOOP標(biāo)志進(jìn)入模態(tài) ASSERT(!(m_nFlags & WF_MODALLOOP)); do RunModalLoop()與Run()不同的是,RunModalLoop()既可以向父窗口發(fā)送WM_ENTERIDLE消息,,也可以向當(dāng)前窗口發(fā)送與空閑消息等同的WM_KICKIDLE消息,,使對(duì)話框有能力在空閑時(shí)完成一定得操作。同時(shí)允許刷新顯示對(duì)話框,。但注意CWinThread::OnIdle()在這里不被調(diào)用,。 在發(fā)送WM_KICKIDLE消息時(shí),由于它在消息泵中不被分發(fā)處理,,所有只能是用SendMessage()而不是PostMessage()發(fā)送該消息,。 2,、結(jié)束模式循環(huán) 只要在對(duì)話框中調(diào)用CDialog::EndDialog()就可以結(jié)束模式循環(huán)。結(jié)束后必須調(diào)用DestroyWindow()銷毀對(duì)話框(DoModal()退出前已經(jīng)完成),。用CDialog::Create()創(chuàng)建非模態(tài),,則必須自己調(diào)用EndDialog()和DestroyWindow()。 3,、創(chuàng)建普通的模態(tài)對(duì)話框 (1),、調(diào)用EnableWindow()禁止程序主窗口。 (2),、使用CWnd::Create()等創(chuàng)建命令,,創(chuàng)建該窗口??梢允箯棾龃翱?,也可以使重疊窗口。 (3),、調(diào)用模式循環(huán)函數(shù)RunModalLoop(DWORD dwFlags),,根據(jù)實(shí)際需要設(shè)置實(shí)參,如果需要空閑處理,,還須手工添加消息映射,。 (4)、當(dāng)關(guān)閉窗口時(shí),,調(diào)用EndModalLoop(int nResult),,根據(jù)實(shí)際需要結(jié)束代碼。 (5),、激活主窗口,,調(diào)用DestroyWindow()摧毀當(dāng)前模態(tài)窗口。一定要確保窗口銷毀前已經(jīng)結(jié)束了模式循環(huán),。
////////////////////////////////////////////////////////////////// http://hi.baidu.com/xiaorida21/blog/item/79988df3fe53edc30b46e05c.html 對(duì)話框的命令消息路由 如果一個(gè)對(duì)話框(無論是彈出和重疊,,不分模態(tài)與非模態(tài))的父窗口是主框架或視圖,該對(duì)話框的菜單命令就可以在對(duì)個(gè)對(duì)象中處理,,它的處理路由是:對(duì)話框->視圖->文檔對(duì)象->主框架->應(yīng)用類,。一旦命令消息被處理,將不再繼續(xù)傳遞,。 首先搜尋該對(duì)象的消息映射,,若該對(duì)象沒有處理這個(gè)命令消息,則若命令I(lǐng)D在[0x8000,0xF000]范圍內(nèi),,則向下傳遞,,否則終止處理。(命令I(lǐng)D在[0x8000,0xF000]:全局命令,,包括菜單,、加速鍵,、系統(tǒng)命令等;命令范圍在[0xF000,0xFFFF]:Windows系統(tǒng)命令(不被傳遞)),。若是命令I(lǐng)D在[0x8000,0xF000]范圍內(nèi),,則傳遞給父窗口,有父窗口負(fù)責(zé)命令路由,。如果父窗口也沒有處理,,則將它交給應(yīng)用類,在父窗口不是主框架窗口時(shí),,傳給應(yīng)用類是有意義的,。 如果父窗口不是主框架,應(yīng)用類得到最后的處理機(jī)會(huì),;如果父窗口是主框架,,最后應(yīng)用類(UI線程)的代碼是多余的。若父窗口是視圖,,而視圖是主框架的子窗口,,而對(duì)話框時(shí)彈出或重疊窗口,所以不能被視圖控制,,而最終由主框架接管,。 疑問:為什么說“對(duì)話框的父窗口是視圖,而視圖是主框架的子窗口,,而對(duì)話框時(shí)彈出或重疊窗口,,所以不能被視圖控制,,而最終由主框架接管,。”,?疑問中……
//////////////////////////////////////////////////////////////////// http://hi.baidu.com/xiaorida21/blog/item/8cd26af82ef8c707d8f9fd37.html 1,、檢索窗口 1、1根據(jù)標(biāo)題和窗口類查找窗口 CWnd類的靜態(tài)函數(shù)FindWindow()或者同名的API函數(shù),,只要是重疊或彈出窗口,,都可以用該函數(shù)查找窗口。 HWND FindWindow(LPCTSTR lpClassName, //目標(biāo)窗口的窗口類名稱 LPCTSTR lpWindowName//目標(biāo)窗口的窗口標(biāo)題名稱); 1,、2根據(jù)窗口的相對(duì)位置或所屬關(guān)系查找窗口 API函數(shù)GetWindow()可以用于枚舉所有窗口,。 HWND GetGetWindow(HWND hWnd,//作為參照物的窗口句柄 UINT nCmd//目標(biāo)窗口與參照窗口的位置關(guān)系) 這樣,,將FindWindow()與GetWindow()結(jié)合使用,,前者查到符合條件的Z-Order順序最高的窗口,后者以這個(gè)窗口為起點(diǎn),,反復(fù)枚舉當(dāng)前所得句柄的下一個(gè)窗口,,就可以得到所有符合條件的窗口了,。
///////////////////////////////////////////////////////////// http://hi.baidu.com/xiaorida21/blog/item/694f73d3a320a0d7a9ec9ac8.html CWnd類封裝了兩個(gè)函數(shù):GetClientRect()和GetWindowRect(),分別用于返回窗口的屏幕坐標(biāo)和客戶區(qū)坐標(biāo)的矩形區(qū)域,。ScreenToClient()和ClientToScreen(),,用于屏幕坐標(biāo)與客戶區(qū)坐標(biāo)之間的轉(zhuǎn)換。以上的四個(gè)函數(shù)都是通過封裝同名API實(shí)現(xiàn),。 對(duì)于彈出窗口和重疊窗口,,GetClientRect()和GetWindowRect()取得的rect尺寸是不相等的,因?yàn)榭蛻魠^(qū)不包括標(biāo)題欄,、邊框等區(qū)域,;如果是子窗口,則取得的rect尺寸相等,,因?yàn)樽哟翱谝话阒挥锌蛻魠^(qū),。
////////////////////////////////////////////////////////// http://hi.baidu.com/xiaorida21/blog/item/386c038bd80519dbfd1f10de.html 一、windows窗口之間的關(guān)系包括所有與被所有關(guān)系,,父子關(guān)系等,。 操作系統(tǒng)為每個(gè)窗口實(shí)例都分配一個(gè)內(nèi)存空間,該空間被稱為窗口實(shí)例的信息結(jié)構(gòu),。該結(jié)構(gòu)包含了窗口實(shí)例的所有信息,,其中有四個(gè)窗口句柄:1、本窗口實(shí)例的Z_Order順序最高的子窗口句柄,;2,、本窗口實(shí)例的下一個(gè)兄弟窗口的句柄(子窗口之間稱為兄弟窗口);3,、本窗口實(shí)例的父窗口句柄,;4、本窗口實(shí)例的所有者窗口句柄,。 二,、桌面窗口(第一層窗口) windows初始化時(shí),首先創(chuàng)建一個(gè)桌面窗口,,其他所有窗口都顯示在其上,。::GetDesktopWindow()可以取得桌面窗口的句柄。桌面窗口位于系統(tǒng)窗口層次的最上層,。 三,、頂級(jí)窗口(第二層窗口) 它沒有被設(shè)置為WS_CHILD風(fēng)格的窗口,但它是桌面的子窗口,。雖然頂級(jí)窗口之間存在兄弟關(guān)系,,但它們之間可以建立一種所有與被所有的關(guān)系(所有者窗口和受控窗口)。受控窗口位于所有者窗口前段,即它的Z_Order順序可以被所有者窗口被激活而提高,。所有者窗口最小化時(shí),,受控窗口被隱藏。當(dāng)使用CreateWindow()和CreateWindowEx()創(chuàng)建一個(gè)頂級(jí)窗口時(shí),,參數(shù)hWndParent決定所有者窗口,,若hWndParent為子窗口,則由系統(tǒng)搜索該子窗口的上級(jí)窗口,,直到找到最近的頂級(jí)窗口,,作為被創(chuàng)建窗口的所有者。 四,、子窗口(第三層及其以下窗口) 子窗口以同樣的方式和父窗口連接,。決定頂級(jí)窗口之間的Z_Order順序的規(guī)則,同樣適合子窗口之間,,即由擴(kuò)展風(fēng)格WS_EX_TOPMOST和窗口激活的先后順序共同決定,。 五、重疊窗口與彈出窗口的區(qū)別 它們都是頂級(jí)窗口,。前者總有標(biāo)題欄和邊框,,并且總是自動(dòng)設(shè)置WS_CLIPSIBLINGS風(fēng)格。調(diào)用CreateWindow()和CreateWindowEx()創(chuàng)建重疊窗口時(shí),,可以指定默認(rèn)的窗口尺寸參數(shù),,即CW_USEDEFAULT,由系統(tǒng)設(shè)置窗口的初始尺寸,。彈出窗口同樣自動(dòng)設(shè)置WS_CLIPSIBLINGS風(fēng)格,,但其他風(fēng)格必須專門指定,不可以使用CW_USEDEFAULT作為初始尺寸,。 文檔信息 作者:一個(gè)農(nóng)夫 ( www.cnblogs.com/afarmer ) 鏈接:http://www.cnblogs.com/afarmer/archive/2011/05/06/2038974.html 歡迎轉(zhuǎn)載,,請(qǐng)保留文檔信息。 分類: mfc
0
0
(請(qǐng)您對(duì)文章做出評(píng)價(jià))
|
|