复选框不会更改正在写入文件的“ 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);
}
答案 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
以确认代码执行路径。