首先我在視窗登錄時,在A.CPP中,就對這個子視窗進行生成
m_conditionDlg.Create(IDD_DIALOG2, this);
m_conditionDlg.ShowWindow(SW_HIDE);
m_conditionDlg--是生成的子視窗的關聯類
然后通過圖片,左邊的樹結構,點擊“條件單”去顯示這個視窗,通過ShowWindow(SW_SHOW);去顯示出來
圖1

if (strItem == "條件單")
{
m_nCurMenu = 10;
CRect rt, rr;
GetClientRect(&rt);
int h = rt.Height();
GetDlgItem(IDC_STATIC_gg)->GetWindowRect(rr);
ScreenToClient(&rr);
p_rt = rt;
p_rr = rr;
rt.top = rt.top + 5; rt.bottom = h - 3; rt.left = rr.right + 10;
m_conditionDlg.MoveWindow(rt);
m_conditionDlg.ShowWindow(SW_SHOW);
//MessageBox("條件單測驗");
}
這樣生成的視窗是可以操作的,沒問題的。
但是我通過下圖的“條件”按鈕 B.CPP生成上面的那個 “下單”視窗,在點擊“下單”按鈕,去生成剛剛的條件單視窗,
(其實還是通過A.CPP中
m_conditionDlg.Create(IDD_DIALOG2, this);
m_conditionDlg.ShowWindow(SW_HIDE);
的兩句代碼生成的視窗 將其顯示出來)
圖2

通過下面那樣的代碼顯示
CfClientApp *app = (CfClientApp*)AfxGetApp(); // 這個函式可以得到當前應用行程的指標
m_mainDlg = (CMainDlg*)app->m_pMainWnd;
m_mainDlg->OpenConditionWindow(); // 顯示條件單視窗
/*********************************************
* 函式名:OpenConditionWindow
* 功 能:顯示條件單視窗
* 參 數:無
* 時 間:2018年2月8日15:00:11
* 編 寫:YX
*********************************************/
void CMainDlg::OpenConditionWindow()
{
//p_rt.top = p_rt.top + 5; //p_rt.bottom = h - 3; //rt.left = rr.right + 10;
//m_conditionDlg.MoveWindow(p_rt);
//m_conditionDlg.Create(IDD_DIALOG2, this);
CRect rt;
GetClientRect(&rt);
rt.left += 530;
m_conditionDlg.MoveWindow(rt);
m_conditionDlg.ShowWindow(SW_SHOW);
}
但是這樣顯示出來的“條件單”視窗就出現了 圖2 中的情況,這視窗跟另一個視窗出現的重疊的情況,而且“條件單”視窗還不能進行任何操作,滑鼠在上面拖拽過,還會把“條件單”視窗給刷沒了。
所以請問這是什么問題? 我該怎么寫,才能在點擊“下單”按鈕后,顯示出能操作的“條件單”視窗呢?
uj5u.com熱心網友回復:
估計是父視窗制作this作怪吧,前面的 m_conditionDlg.Create(IDD_DIALOG2, this);不要
if (strItem == "條件單")
{
……
//顯示之前創建
if(m_conditionDlg.m_hWnd == NULL)
m_conditionDlg.Create(IDD_DIALOG2, this);
m_conditionDlg.MoveWindow(rt);
m_conditionDlg.ShowWindow(SW_SHOW);
……
}
uj5u.com熱心網友回復:
不是哦,這個只是在A.CPP檔案里面,對樹形點擊后顯示出 “條件單”視窗 的, 并不影響 B.CPP 下單視窗對 “條件單”視窗的顯示啊。因為
m_conditionDlg.Create(IDD_DIALOG2, this);
是在A.CPP初始化的方法里面做好的, 后面的按鈕只是改變他的顯示屬性,
現在我是在B.CPP通過 “下單”按鈕把這個 “條件單”視窗顯示出來,所以通過下面的代碼
CfClientApp *app = (CfClientApp*)AfxGetApp(); // 這個函式可以得到當前應用行程的指標
m_mainDlg = (CMainDlg*)app->m_pMainWnd;
m_mainDlg->OpenConditionWindow(); // 顯示條件單視窗
/*********************************************
* 函式名:OpenConditionWindow
* 功 能:顯示條件單視窗
* 參 數:無
* 時 間:2018年2月8日15:00:11
* 編 寫:YX
*********************************************/
void CMainDlg::OpenConditionWindow()
{
//p_rt.top = p_rt.top + 5; //p_rt.bottom = h - 3; //rt.left = rr.right + 10;
//m_conditionDlg.MoveWindow(p_rt);
//m_conditionDlg.Create(IDD_DIALOG2, this);
CRect rt;
GetClientRect(&rt);
rt.left += 530;
m_conditionDlg.MoveWindow(rt);
m_conditionDlg.ShowWindow(SW_SHOW);
}
所以這里加上這句,不影響的啊
if (strItem == "條件單")
{
……
//顯示之前創建
if(m_conditionDlg.m_hWnd == NULL)
m_conditionDlg.Create(IDD_DIALOG2, this);
。。。。。。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/75376.html
標籤:界面
上一篇:CHM 右側顯示無法訪問此頁
