1. 程式人生 > >標籤控制元件中顯示對話框出現的問題及解決方法

標籤控制元件中顯示對話框出現的問題及解決方法

問題描述:

1.整體對話框出現時,理應出現在標籤控制元件當中的對話方塊飛出去了,沒有在標籤控制元件當中;

2.標籤控制元件切換的時候有問題,並不是所有的標籤選項都可以切換到。



解決方法:

1.飛出去的解決方法:

過程:在查詢標籤控制元件所在的螢幕座標系和客戶區座標系時,都非常的奇怪,都是幾乎在整個電腦螢幕的左上角,明顯與所在的位置不大一樣。

方法:將對話方塊的的Style改為child風格,Border風格改為None(此為將對話方塊不要邊框)注意Border風格也要修改,否則有可能還是會飛出去;

2.標籤切換的問題:

過程:當時的實現程式碼是:

void CImageExtractDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{

int nSel = m_tab.GetCurSel();
CWnd* ps[] = {&m_ima,&m_com,&m_res};
int i = 0;
while (i<sizeof(ps)/sizeof(ps[0]))
ps[i++]->ShowWindow(i == nSel?SW_SHOW:SW_HIDE);
ps[nSel]->SetFocus();
*pResult = 0;
}

其中造成不能切換到位的程式碼是 :ps[i++]->ShowWindow(i == nSel?SW_SHOW:SW_HIDE);

初步看是沒有任何問題的,仔細研究就會發現在執行過程中 ps[i++]中的i仍為i值,之後會+1,此時ShowWindow()函式

中i值為i+1,他並不是當時所選擇的標籤項,而是多加了1;

方法:將其改為兩行程式碼 ps[i]->ShowWindow(i == nSel?SW_SHOW:SW_HIDE);  i++;