2014-04-07 51 views
0

複選框不會更改正在寫入文件的「use_Xml」變量的值。 這是我想的範圍問題,但我不知道如何去做。我是初學者。 這可能已經回答了很多次,但我不知道如何正確地提出問題並找到答案。我將同意重定向到相關問題。C++將變量值從一個代碼塊傳遞到另一個代碼塊

#include <stdio.h> 
#include <windows.h> 
... 
string use_Xml = "1"; 
... 

LRESULT CALLBACK WinProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); 

int WINAPI WinMain(...) {...} 

    LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) 
    { 

     switch(msg) 
     { 

     case WM_COMMAND: 

     switch(LOWORD(wParam)) 
     { 

      case IDC_MAIN_CHKBX_X: 
      { 

       UINT checkedX = IsDlgButtonChecked(hWnd, IDC_MAIN_CHKBX_X); 

       switch (checkedX) 
       { 

       case BST_CHECKED: 
        { 
        CheckDlgButton(hWnd, IDC_MAIN_CHKBX_X, BST_UNCHECKED); 
        SetWindowText(hWnd, TEXT("no")); 
        use_Xml = "0"; 
        } 
        break; 

       case BST_UNCHECKED: 
        { 
        CheckDlgButton(hWnd, IDC_MAIN_CHKBX_X, BST_CHECKED); 
        SetWindowText(hWnd, TEXT("yes")); 
        use_Xml = "1"; 
        } 
        break; 
       } 

      } 
      break; 

      case IDC_MAIN_BUTTON_S: 
      { 
       ofstream myfile ("foo.ini"); 
       myfile << use_Xml << "\n"; 
       myfile.close(); 
      } 
      break; 
     } 
     break; 

     } 

     return DefWindowProc(hWnd,msg,wParam,lParam); 
    } 
+0

在哪裏以及如何定義'use_Xml'? –

+0

也有'use_Xml'作爲'string'似乎是一個值得懷疑的方法。爲什麼不有'bool'表示一個布爾值? – legends2k

+0

'use_Xml'' string'或'bool'? – Balu

回答

1

IsDlgButtonChecked()返回值是一個UINT,而不是一個BOOL。從鏈接參考頁:

 
Return code  Description 

BST_CHECKED  The button is checked. 

BST_INDETERMINATE The button is in an indeterminate state (applies only 
        if the button has the BS_3STATE or BS_AUTO3STATE style). 

BST_UNCHECKED  The button is not checked. 

這可能是所有這些值都導致相同的執行路徑非零採取對話框中的複選框的狀態無關。 更正代碼並將診斷日誌記錄添加到使用返回值確認代碼執行路徑的if/else

+0

好吧,我想我理解你的意思。我現在會嘗試。 TY。我不得不穀歌診斷日誌記錄。 –

+0

@JohnDoh,_diagnostic logging_:只寫入一個文件或'std :: cout'。 – hmjd

+0

我將SetWindowText添加到if語句,並且它按預期工作 - 複選框狀態對應於應用程序標題中的文本。我不確定如何進一步熟練使用我的代碼。如果我將檢查Func定義爲UINT類型,那麼針對什麼值檢查 - BST_CHECKED/BST_UNCHECKED? –

相關問題