折騰了一早上,想在文件類中獲得對話方塊使用者互動的資料:
ctestdlg dlg;
if(idok==dlg.domodal())
首先想到的是利用視窗類物件自身的控制代碼m_hwnd,錯誤有二:
1. 定義了物件而為進行任何操作,所以裡面的控制代碼為空
2. 呼叫domodal()後對話方塊視窗已經銷毀了,再對該對話方塊操作,當然就會出現非法訪問,具體是在:assert(::iswindow(m_hwnd))出錯
關於getdlgitem();
以前使用它基本上都是在視窗類中,直接呼叫從來也沒思考,現在在文件類中呼叫,倒一下子不會用了,它有三種形式(不算cwindows中的):
1.sdk形式,返回對話方塊中控制項的控制代碼
hwnd getdlgitem(hdlg:對話方塊控制代碼hwnd hdlg,
int niddlgitem
);
niddlgitem:控制項id
2.cwnd的成員函式:
virtual cwnd* getdlgitem(
intnid
) const;
直接由對話方塊指標呼叫
3.cwnd的成員函式:
virtual void getdlgitem(
intnid,
hwnd*phwnd
) const;
phwnd:對話方塊的控制代碼
另:幾個小知識
1.cwindow和cwnd的區別: cwindow封裝了atl得視窗類,cwnd封裝了mfc的視窗類。
2.從視窗控制代碼到視窗指標的轉換: cwnd * pwnd=cwnd::fromhandle(m_hwnd);
3.找到頂層活動視窗: ::findwindow(類名,視窗title);
4.domodal呼叫時,對話方塊成員函式的呼叫順序
oninitdialog->dodataexchange->返回,銷毀對話方塊視窗
對話方塊 訊息對話方塊
我們在使用windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發中經常用到訊息對話方塊,所以mfc提供了兩個函式可以直接生成指定風格的訊息對話方塊,而不需要我們在每次使用的時候都要去建立對話方塊資源和生成對話方塊類等。這兩個函式就是cwnd類的成員函式mes...
對話方塊中顯示對話方塊
一 對話方塊中顯示對話方塊的方法 1 首先建立要在對話方塊裡顯示的那個對話方塊,命名為 idd inner 設定這個對話方塊的屬性 1 style 選擇 child 中文版 樣式 選擇 下層 2 border 為 none 中文版 邊框 選擇 無 2 為了顯示時能夠準確定位,我們可以在右邊要顯示對話...
常用對話方塊 訊息對話方塊
使用windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發 中經常用到訊息對話方塊,所以mfc提供了兩個函式可以直接生成指定風格的訊息對話方塊,而不需要我們在每次使用的時候都要去建立對話方塊資源和生成對話方塊類等。這兩個函式就是cwnd類的成員函式messa...