Displaying Int Variable in LPCSTR CreateWindowEx function
因此,我正在做一个基本的井字游戏,这是我在Win32中的第一个程序(只是为了好玩而学习更多,没有学校作业或其他任何东西)。我已经完成了大部分的UI和基本的游戏操作,例如单击正方形并适当放置x \\或o \\。我写了它,以便在游戏结束时识别谁是赢家,并可以显示一个小的文本窗口,上面写着" PLAYER 1 WINS!"等。...
我的问题不是关于如何显示分数的。我的想法是拥有一个名为scoreplayer1的int变量,当玩家获胜时,我会将其增加1(scoreplayer1)。然后,我想将以前的乐谱更改为新乐谱的窗口。这是我到目前为止的内容(我将取出与此问题无关的所有代码,但是如果您需要更多,请告诉我):
我的全局变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //Global Variables HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name HWND hwnd1, hwnd2, hwnd3, hwnd4, hwnd5, hwnd6, hwnd7, hwnd8; HWND hwnd9, hwndscore1, hwndscore2, hWnd; // Forward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int determinewinner(); int showscore(int win_value); int scoreplayer1,scoreplayer2; |
最初创建得分窗口的CreateWindow函数(开始时为空白):
1 2 3 4 5 6 | LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) case WM_CREATE: hwndscore1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("STATIC"),TEXT(""), WS_CHILD|WS_VISIBLE|SS_CENTER, 20,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL); hwndscore2 = CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("STATIC"),TEXT(""), WS_CHILD|WS_VISIBLE|SS_CENTER, 130,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL); |
然后尝试处理更改分数窗口的功能:
1 2 3 4 5 6 7 8 | int showscore(int win_value) { if(win_value==1) { scoreplayer1++; DestroyWindow(hwndscore1); hwndscore1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("STATIC"),TEXT(scoreplayer1), WS_CHILD|WS_VISIBLE|SS_CENTER, 20,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL); return (scoreplayer1);} // This return part is just temporary because it wants // the function to return a value, it doesn't come into play |
} ??
这个想法是销毁旧窗口,然后简单地用新分数重新创建一个新窗口(这似乎是最简单的方法)。我知道问题出在哪里,它说我不能将int scoreplayer1变量放在最后一个CreateWindowEx函数的TEXT(" scoreplayer1 ")部分中。错误为:typ int的参数与LPCSTR类型的参数不兼容。
那么如何改变最后一个窗口的创建方式,使其显示一个int变量(例如scoreplayer1),该变量会随着游戏的进行而增加?谢谢!
*编辑***
作为回应,我试图使用itoa()解决问题,我做了以下工作:
1 2 3 4 5 6 7 8 9 | int showscore(int win_value) { if(win_value==1) { scoreplayer1++; char score1[1]; itoa(scoreplayer1, score1, 1); DestroyWindow(hwndscore1); hwndscore1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("STATIC"),TEXT(score1), WS_CHILD|WS_VISIBLE|SS_CENTER, 20,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL); return (scoreplayer1);} |
当我到达游戏中的那个点时,哪个会强制程序中断...关于我做错了什么的任何主意?
在C和C中,可以通过多种方式将整数转换为字符串。
您编辑的代码失败,因为字符串的长度为1个字符,并且保证所有数字都不适合一个字符,因为所有数字都代表字符串本身一个字符,而另一个字符则代表零字节的结尾字符串。如果数字大于9,它将占用3个字符,大于99则需要4个字符,依此类推。
在C中,我建议尽管使用更长的时间,但使用
类似这样的内容:
1 2 3 4 | std::stringstream ss; ss << scoreplayer1; hwndscore1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("STATIC"),ss.str().c_str(), WS_CHILD|WS_VISIBLE|SS_CENTER, 20,285,100,20,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL); |