c ++将变量值从一个代码块传递到另一个代码块

时间:2014-04-07 12:55:51

标签: c++ parameter-passing scope

复选框不会更改正在写入文件的“ use_Xml ”变量的值。 这是我认为的范围问题,但我不知道如何正确行事。我是初学者。 这可能已经回答了很多次,但我只是不知道如何正确地提出问题并找到答案。我将同意重定向到相关问题。

#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);
    }

1 个答案:

答案 0 :(得分: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以确认代码执行路径。