当我使用SetWindowText()
时,为什么我无法在窗口中打印文字?这就是我的窗口创建代码:
game_board[i] = CreateWindowEx(0,
L"Static",
board_elements[i],
WS_CHILD | WS_VISIBLE | WS_BORDER,
0,
0,
0,
0,
hwnd,
(HMENU)IDC_STATICBOARD + i + 1,
hInst,
NULL);
当我写下这样的话时:
wchar_t c;
for(i = 0; i < 15; i++){
c = 'a' + i;
SetWindowText(game_board[i], c);
UpdateWindow(game_board[i]);
}
我的程序在触发该事件后崩溃。
如果我使用SetWindowText(game_board[i], L"TEXT");
,它会正常打印TEXT。
我也有这些问题需要预先制作一切,我不知道为什么。
我正在使用VS 13,而project是一个用C ++编写的Windows应用程序。如果我在Codeblocks中复制代码,那么它会为我在VS中创建的每个演员表弹出一个错误,在我全部删除后,它会正常工作。
为什么呢?任何人都可以帮我解决这个问题吗?
答案 0 :(得分:5)
SetWindowText
function需要指向以空字符结尾的字符串的指针。但是你试图将它传给一个角色。
作为一名评论者提到,这段代码甚至不应该编译。你提到了一些关于&#34;需要预制一切的事情&#34;。这可能是问题所在。演员就像告诉编译器并不担心它,我知道我在做什么&#34;。但在这种情况下,你不会。编译器错误试图保护你不犯错误,你应该听。
将代码更改为:
// Declare a character array on the stack, which you'll use to create a
// C-style nul-terminated string, as expected by the API function.
wchar_t str[2];
// Go ahead and nul-terminate the string, since this won't change for each
// loop iteration. The nul terminator is always the last character in the string.
str[1] = L'\0';
for (i = 0; i < 15; i++)
{
// Like you did before, except you're setting the first character in the array.
str[0] = L'a' + i;
SetWindowText(game_board[i], str);
UpdateWindow(game_board[i]);
}
请注意L
前缀。这向编译器表明您正在使用wchar_t
类型所需的宽字符/字符串。