向对话框传递数据DialogBoxParam;获取对话框返回的数据DialogBox;EndDialog;强制转换;
轉自:http://blog.csdn.net/tcjiaan/article/details/8638247
這兩個技巧分別是:
1、在顯示某個對話框時,向對話框傳遞數據。
這個我相信大家能夠理解,就好比咱們在做Web開發的時候,在打開一個頁面時,可能會考慮向目標頁面傳一些參數,如這樣http://www.牛B.com/yyy.aspx?tid=19999,是吧,我們都很經常這樣做,所以,在玩Win32的時候,我們也同樣希望這樣。
我們知道,要顯示一個模態對話框,可以調用DialogBox函數,這個不難,我有理由相信大家只需稍稍研究一下,一定會玩的,就像遙控飛機那么簡單。如果你認真閱讀MSDN,你一定會發現有這么一個函數:DialogBoxParam。怎么樣,是不是和前面的那個DialogBox很像,只是腦袋后面多了幾根汗毛罷了,而且,從Param就可以猜到,應該與參數傳遞有關。對,猜得相當好,我們在顯示某個對話框時,要向對話框傳參數,就是用它了。
順便提一下,什么是模態對話框呢?模態對話框就是說如果這個對話框彈出來(顯示)了,你就不能操作父窗口或者其上面的控年了,程序也會在彈出對話框后停下,直到操作完成了,你把對話框關了,程序才會繼續,你才能操作其他控件,就好像你開車上班,行駛到某個路口,前面有幾輛車突然停了下來,車上下來一群不男不女的人,在馬路上打起架來了,導致交通嚴重受阻,你的車夾在車流中間,既不前進,也不能后退,就卡在那里,你估計只好呆在車里,拿出MP5,看看恐怖片,等到交通恢復正常了,才能繼續行車。
?
看看這個DialogBoxParam函數的定義:
[cpp]?view plaincopy print?前面幾個參數估計不用我介紹了,大家都認識,比周杰倫和刀郎還要出名。重點是最后一個參數,它是一個LPARAM類型的,我記得Win32的許多類型的命名是有規律的,你看看,凡是P開頭或者LP開頭都是指針類型,不信你可以總結一下。
所以這個參數肯定是指定某種未知生物的指針,指針存的是地址,所以我們通過把我們要傳給對話框的數據的地址傳給這個參數,這樣,對話框的消息處理函數如果想取到你傳給它的數據,就從這個地址去找。就好像你同學介紹了一位美女給你認識,他告訴你這位MM的QQ號,然后你想泡她你就知道怎么做了,加QQ聊唄。
那么,這個參數會傳到哪里去呢,怎么取出來呢?這個參數傳給了WM_INITDIALOG消息的lParam參數,所以,在對話框的消息處理函數中,捕捉WM_INITDIALOG消息,從它的lParam參數就可以找到數據的首地址了。
?
顯示對話框并傳遞參數。
[cpp]?view plaincopy print??我傳遞了一些文本給它,即“Win32程序好玩不?”,接著在響應WM_INITDIALOG消息時就接收并顯示這個參數。
[cpp]?view plaincopy print?哈哈,不難吧。
?
2、獲取對話框返回的數據。
前面是傳數據給對話框,現在要反過來,是獲得從對話框傳回來的數據。剛才我們說了,模態對話框顯示時,父窗口會在等待,等啥,就是等DialogBox返回,它返回的類型是INT_PTR,所以,如果要返回比較復雜的數據,可以用它來保存指針,因為指針本質上就是一個數值。
[cpp]?view plaincopy print?我這個例子是在對話框中輸入一些字符,然后把這些字符串返回。所以,返回的內容是指向字符數組首地址的指針,故我直接把它轉換為LPCWSTR類型的變量。
?
在對話框中,調用EndDialog結束對話框,并在第二個參數中傳回數據。
[cpp]?view plaincopy print??
例子運行之后的結果可以看看下面的截圖。
?
 
 
 
 
?
總結
以上是生活随笔為你收集整理的向对话框传递数据DialogBoxParam;获取对话框返回的数据DialogBox;EndDialog;强制转换;的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: android 百度输入法表情,百度输入
 - 下一篇: 微型计算机控制技术第二版答案第四章,微型