剛才解決了一個問題:如何通過一個視窗的控制元件來操縱另一個視窗或視窗中的控制元件。
解決的方法是: 直接通過GetDlgItem(IDC),獲取被操縱視窗/控制元件,將其賦值給一個全域的CWnd*。
在另一個視窗中直接將那個全域的CWnd*強轉為控制元件來實作一系列操作。
下面貼出部分代碼:
uj5u.com熱心網友回復:
//全域變數定義宣告區
extern CListCtrl* list; //此處被我直接定義為被操控控制元件型別,也可以先定義為CWnd*,之后強轉
//被操控_Dlg.h
list = (CListCtrl*) GetDlgItem(IDC_LIST1);
//操控_Dlg.h
list->InsertItem(0, tk->type);
list->SetItemText(0, 1, tk->size);
list->SetItemText(0, 2, tk->time);
//代碼執行通過,視窗測驗也沒問題
uj5u.com熱心網友回復:
之前為了實作該功能也問過不少人,大多數都是建議我使用PostMessage從操控視窗向被操控視窗中發送訊息來控制被操控視窗中的控制元件,但當我問起為何非要發送訊息來實作時,都說不上理由。大概是,發送訊息,通過被操控表單中的訊息映射函式來實作自己視窗下的控制元件比較安全。我想問一下諸位大神,真的是這樣嗎?如果是,除此之外,兩種方法還有啥區別嗎?uj5u.com熱心網友回復:
沒啥區別,你這種做法就是全域變數的做法,弊端是如果你有很多控制元件,可能需要很多全域變數,全域變數越多,代碼越難閱讀,還有一個,PostMessage可以在子執行緒內實作對UI控制元件的通知,指標這種在子執行緒中就不行了,子執行緒操作UI控制元件會引發例外。uj5u.com熱心網友回復:
ui設計的初衷就是期望你在一個執行緒里去操作,跨執行緒直接操作都被認為不安全,和你多執行緒操作全域變數一個道理,現在你跨行程去操作也是同樣,都是有風險的uj5u.com熱心網友回復:
發訊息是一種低耦合的呼叫方式uj5u.com熱心網友回復:
句柄的作用就是不讓你知道我咋實作的。uj5u.com熱心網友回復:
能不用全域變數就不用,windows表單有個GWLP_USERDATA的保留欄位讓你儲存自己的資料,不過沒什么人用uj5u.com熱心網友回復:
發票號碼的作用,或者說好處?人民幣上序列號的作用,或者說好處?
身份證號碼的作用,或者說好處?
銀行卡號的作用,或者說好處?
uj5u.com熱心網友回復:
good
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/125139.html
標籤:基礎類
上一篇:MFC工程怎樣打包???
