我如果用指針指向一個窗口是可以賦值的, 因為其內存已經分配好, 但有個缺點是用ShowWindow方式來顯示窗口的,不能用DoModal,希望可以用domodal,因為可以在子窗口退出后,把子窗口里的內容賦值到父窗口里,這個代碼直接寫在 dlg.DoModal()后面,會在窗口退出后運行, 而ShowWindow是連續執行完的,不停頓的。
1, 用指針是可以的。其中m_meetSite和m_destSite是列表框控件
CselectSite selectSite, *pselectSite;
CString sSiteName;
pselectSite = new CselectSite();
pselectSite->Create(IDD_selectSite,this);
if(NULL != pselectSite)
{
//對會場選擇中的會場進行賦值
for (int i=0; i<m_meetSite.GetCount();i++)
{
m_meetSite.GetText(i,sSiteName);
pselectSite->m_destSite.AddString(sSiteName);
}
}
pselectSite.ShowWindow(SW_SHOW);
2,但如果用domodal就不可以了,報錯
CselectSite selectSite, *pselectSite;
CString sSiteName;
//對會場選擇中的會場進行賦值
for (int i=0; i<m_meetSite.GetCount();i++)
{
m_meetSite.GetText(i,sSiteName);
selectSite.m_destSite.AddString(sSiteName);
}
selectSite.DoModal();
8 个解决方案
selectSite.m_destSite.AddString(sSiteName);
這里的添加到字符串操作,是因為你的控件還沒有建立好
放到對話框的初始化函數里
DIALOG在Create或者DoModal調用的時候才初始化控件,所以你在DoModal前調用肯定有問題,可以設置成員變量來保存對話框的值,在OnInitDialog時將他們賦給控件,在OnOK時,從控件賦給變量
to: laiyiling(最熟悉的陌生人)
因為我在主窗口里的是一個ListCtrl控件, 控件有很多行內容,我不可能在子窗口里申明很多變量來接收的, 所以最好的辦法是在主窗口打開的時候就對子窗口賦值,但需要是模式的顯示子窗口
to: snaill()
關鍵是如何把不定的記錄集傳入到子窗口里去,不是簡單的一兩個變量,列表框控件里的記錄數是不定的。
如果非得用DoModal方式的話,
要實現你的要求只能把代碼定在OnInitDialog初始中或之后,並在ShowWindow之前
的這個過程中就可以了。
這種情況,你在dlg內部設置一個結構數組,DoModal之前先設置該數組,然后在dlg的OnInitDialog中根據該結構數組設置List不就可以了嗎?
要看你的數據量,如果可測得話,可以采用List變量傳遞
如果不可測,這要傳遞獲取數據的指針,比如記錄集的指針到Dialog。當然你也可以Dialog中打開數據庫操作
總之方法是多樣的,但在未初始化前調用控件絕對是不允許的