討論區快速選單
知識庫快速選單
沒有人比Cloudera更了解大數據 網路投保旅行平安險 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
MFC:progress bar Ccontrol與Tab control
更改我的閱讀文章字型大小
作者 : difgor04262002(Gavin0130)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/10/3 下午 04:14:01
void ExaminationMode::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_PROGRESS_READ_VOUT, m_progressBar);
}

BEGIN_MESSAGE_MAP(ExaminationMode, CDialogEx)

ON_BN_CLICKED(IDC_BUTTON_READ_VOUT_GO,
     ExaminationMode::OnBnClickedButtonReadVoutGo)
ON_BN_CLICKED(IDC_BUTTON_READ_VOUT_BACK,
     &ExaminationMode::OnBnClickedButtonReadVoutBack)

END_MESSAGE_MAP()

BOOL ExaminationMode::OnInitDialog()
{
CDialogEx::OnInitDialog();

//-------------------------------------------------------------
//Progress Bar
//SetDlgItemText(IDC_PROGRESS_READ_VOUT,_T("0%"));
m_progressBar.SetRange(0,100);
m_progressBar.SetStep(5);
m_progressBar.SetPos(10);
m_progressBar.SetBarColor(RGB(0, 255, 0));
UpdateData(FALSE);
//-------------------------------------------------------------
return TRUE;
}
void ExaminationMode::OnBnClickedButtonReadVoutGo()
{
int nLow,nUp;
m_progressBar.GetRange(nLow,nUp);
int nPos = m_progressBar.GetPos();
if((nPos+1>nUp)&&(nPos<=nUp))
{
nPos=100;
}
else
{
nPos+=5;
m_progressBar.SetPos(nPos);
UpdateData(FALSE);
}
}
void ExaminationMode::OnBnClickedButtonReadVoutBack()
{
int nLow,nUp;
m_progressBar.GetRange(nLow,nUp);
int nPos = m_progressBar.GetPos();
if((nPos+1>nUp)&&(nPos<=nUp))
{
nPos=100;
}
else
{
nPos-=5;
m_progressBar.SetPos(nPos);
UpdateData(FALSE);
}
}
想請問的是,以上程式片段放在一個單獨的Dlg時是可以正常動作。
但是,我將這個Dlg放在Tab control時,為何無任何回應?

我目前查到的資料是此Dlg內的控件都要在此Dlg內處理。
是否還要在放置此Tab control的主要Dlg加入一些處理的程式。
感謝解惑!
作者 : dghkd(dghkd)
[ 貼文 3 | 人氣 0 | 評價 30 | 評價/貼文 10 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/10/4 上午 01:16:54
提供的資訊有點少....不太清楚您整個專案中對話框與各個控制項的關係

不過我猜您會不會是沒有將您layout好的對話框資源做新增類別
在最基層的主對話框中放上一個tab control後
再新增一個對話框資源,也就是您要放到這個tab control裡用的
將此對話框新增一個基於CDialog的類別。假設自訂名稱為xxxdlg
接著便會自動創建xxxdlg.h與xxxdlg.cpp檔,那麼您主要的操作程式便可以在xxxdlg.cpp裡進行了,就如同單獨的Dlg一樣
然後記得在主對話框的cpp檔中include xxxdlg.h檔
作者 : difgor04262002(Gavin0130)
[ 貼文 4 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/10/4 上午 10:50:59
感謝dghkd(dghkd)的回應。
我有將此xxxDlg新增類別,在主要Dlg上的Tab 可以正常顯示此xxxDlg,

以下聯結有此專案的程式碼:
https://docs.google.com/file/d/0Bx0Tam9PXSmSWHBsN0gwcXRnUE0/edit?usp=sharing

HidUartExampleDlg.cpp←是主要的Dlg

ExaminationMode.cpp←是此發問問題的Dlg

作者 : dghkd(dghkd)
[ 貼文 3 | 人氣 0 | 評價 30 | 評價/貼文 10 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人difgor04262002註記此篇回應為最佳解答 2013/10/5 上午 03:08:39
很抱歉,您的專案檔我無法打開,所以只好個別看,邊看邊猜,花了一些時間
大致看了一下您資源檔的對話框layout與部分程式碼
您要放到tab上的對話框是IDD_Examination_DIALOG
而你為此對話框新增的類別名稱為ExaminationMode,並繼承自CDialogEx類別
然後您想要對此對話框進行控制而在主對話框宣告一名成員叫m_TabPage2
但是您的m_TabPage2型態卻是CDialogEx,這邊應該是有問題的
您應該要利用您新增的類別ExaminationMode來進行宣告才對

我簡單做了一個範例您參考看看(做得非常簡略,tab有兩頁但是沒有做換頁處理,不堪入目請多見諒)
http://goo.gl/MdtE5a
請查閱tabctrl_testDlg.h中的宣告
以及tabctrl_testDlg.cpp中的OnInitDialog()的部分

不知道這樣是不是能解決您的問題

ps.修改一下我上一篇的最後一句
>然後記得在主對話框的cpp檔中include xxxdlg.h檔
然後記得在主對話框的h檔中include xxxdlg.h檔 <-這樣才對
 板主 : 徵求中
 > Visual C++ .NET - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Visual C++ .NET - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Visual C++ .NET
1 青衫 2220 
2 Raymond 1500 
3 joe 520 
4 冷眼 350 
5 CodeWarrior 260 
6 marlon 230 
7 小朱 210 
8 windblown 200 
9 XWLin 120 
10 小約翰 120 
Visual C++ .NET
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125