2011-06-13 18 views
1

語言:的Visual C++,MFC獲取按鈕的ID爲switch語句:MFC

環境: Visual Studio 2005中

我有一個需要用戶設置文件路徑爲六個不同的對話設置。每個文本框都有一個瀏覽按鈕,用來啓動文件瀏覽器。

如何設置它,以便所有瀏覽按鈕都調用相同的函數來啓動選擇器,然後使用開關來確定哪個按鈕調用了文件選擇器,以便我可以設置適當CEdit的文本與路徑框? // 連寫句,哈

我敢肯定,我將不得不使用GetDlgCtrlID,我只是不知道如何。

非常感謝您的幫助!

〜喬恩

編輯:這是我現在的代碼...很簡單,因爲我剛開始它爲現在的工作。

BEGIN_MESSAGE_MAP(FSC_3DPersp, CSAPrefsSubDlg) 
//{{AFX_MSG_MAP(FSC_3DPersp) 
    // NOTE: the ClassWizard will add message map macros here 
//}}AFX_MSG_MAP 
ON_COMMAND(BN_CLICKED, &FSC_3DPersp::Browse) 
END_MESSAGE_MAP() 

///////////////////////////////////////////////////////////////////////////// 

// FSC_3DPersp消息處理程序

void FSC_3DPersp::Browse(UINT uiID) 
{ 
// TODO: Add your control notification handler code here 

switch(uiID) 
{ 
case IDC_BUTTON1: 
    MessageBox("1"); 
    break; 
case IDC_BUTTON2: 
    MessageBox("2"); 
    break; 
case IDC_BUTTON3: 
    MessageBox("3"); 
    break; 
case IDC_BUTTON4: 
    MessageBox("4"); 
    break; 
case IDC_BUTTON5: 
    MessageBox("5"); 
    break; 
case IDC_BUTTON6: 
    MessageBox("6"); 
    break; 
case IDC_BUTTON7: 
    MessageBox("7"); 
    break; 
} 
} 

BOOL FSC_3DPersp::OnCommand(WPARAM wParam, LPARAM lParam) 
{ 
if (HIWORD(wParam) == BN_CLICKED) 
{ 
    Browse(LOWORD(wParam)); 
    return TRUE; 
} 
return CWnd::OnCommand(wParam, lParam); 
} 

回答

3

如果你響應BN_CLICKED消息,按鈕ID將被包含在該消息的wparamLOWORD

編輯: MFC通常會丟棄消息的wparam。要訪問它,您必須覆蓋對話框中的OnCommand處理程序。

BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam) 
{ 
    if (HIWORD(wParam) == BN_CLICKED) 
    { 
     Browse(LOWORD(wParam)); 
     return TRUE; 
    } 
    return CWnd::OnCommand(wParam, lParam); 
} 
+0

我不知道這是如何工作。這就是我正在使用的: ON_BN_CLICKED(IDC_BUTTON1,&FSC_3DPersp :: Browse) 因此,每個按鈕1-7調用Browse(),它在這個函數中,我希望有一個開關。 – Jon 2011-06-13 19:20:20

+0

編輯:我已經添加了我有的代碼,但我不知道我做的是否正確。 – Jon 2011-06-13 19:24:02

+0

謝謝你的幫助,馬克:) – Jon 2011-06-13 19:35:43

2

ON_COMMAND期望一個沒有參數的函數。爲了您的Browse方法,你應該使用ON_CONTROL_RANGE宏:

ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON7, Browse) 

您應該確保IDC_BUTTON1IDC_BUTTON7有連續的數值。

您可以閱讀這篇文章以獲取更多信息http://msdn.microsoft.com/en-us/library/84xtde24.aspx

+1

這是比我更好的答案,如果你有連續編號按鈕ID的規則。 – 2011-06-13 20:35:31

+0

我最初嘗試過的控制範圍,但不知道如何實現它。我會試試這個,因爲我的按鈕是連續編號的。 – Jon 2011-06-13 20:58:21