为什么终端在 运行 win32 window 时不显示 printf 消息
Why terminal are not showing printf messages whening running win32 window
我是运行普通的win32 API,但是执行后不久就显示所有消息。
我正在为我的游戏测试输入键的回调,当我按下任何按钮时没有任何反应,但关闭应用程序后一切恢复正常,我不知道我做错了什么
Window 文件
#include <stdio.h>
#include <stdlib.h>
#include "./window.h"
Window wind;
LRESULT window_callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch (uMsg) {
case WM_DESTROY: {
PostQuitMessage(0);
exit(EXIT_SUCCESS);
} break;
case WM_KEYUP: {
printf("SOME MESSAGE");
} break;
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
void init_window() {
WNDCLASSA window_class = {0};
window_class.style = CS_HREDRAW|CS_VREDRAW;
window_class.lpfnWndProc = window_callback;
window_class.hCursor = LoadCursor(NULL, IDC_ARROW);
window_class.lpszClassName = "GAME_WINDOW_CLASS";
RegisterClassA(&window_class);
wind.ws_window = CreateWindowEx(0,
window_class.lpszClassName,
wind.title,
WS_VISIBLE | WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
wind.width, wind.height,
NULL, NULL, NULL, NULL);
wind.ws_canvas = GetDC(wind.ws_window);
}
void update_window() {
MSG message;
while (GetMessage(&message, NULL, 0, 0)) {
TranslateMessage(&message);
DispatchMessage(&message);
}
}
Window create_window(char * title, int width, int height) {
wind.title = title;
wind.width = width;
wind.height = height;
wind.running = 1;
init_window();
}
主文件
#include <stdio.h>
// #include "core/gui.h"
#include "core/window.h"
void main() {
create_window("Game Window", 600, 600);
while(1) {
// if(key_pressed("A"))
// printf("A was pressed!");
update_window();
}
}
编辑:
在 printf 末尾加上一个“\n”解决问题
Win api: 使用 TextOut() 或 ExTextOut() 而不是 printf()。您正在写入 HWND 而不是标准 C 句柄。
还使用 Message Box() 而不是 printf 进行调试。
接下来:WM_PAINT,它是序列 BeginPaint...EndPaint。这应该可以帮助您入门。
在 printf 末尾加一个“\n”解决问题
我是运行普通的win32 API,但是执行后不久就显示所有消息。 我正在为我的游戏测试输入键的回调,当我按下任何按钮时没有任何反应,但关闭应用程序后一切恢复正常,我不知道我做错了什么
Window 文件
#include <stdio.h>
#include <stdlib.h>
#include "./window.h"
Window wind;
LRESULT window_callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
switch (uMsg) {
case WM_DESTROY: {
PostQuitMessage(0);
exit(EXIT_SUCCESS);
} break;
case WM_KEYUP: {
printf("SOME MESSAGE");
} break;
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
void init_window() {
WNDCLASSA window_class = {0};
window_class.style = CS_HREDRAW|CS_VREDRAW;
window_class.lpfnWndProc = window_callback;
window_class.hCursor = LoadCursor(NULL, IDC_ARROW);
window_class.lpszClassName = "GAME_WINDOW_CLASS";
RegisterClassA(&window_class);
wind.ws_window = CreateWindowEx(0,
window_class.lpszClassName,
wind.title,
WS_VISIBLE | WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
wind.width, wind.height,
NULL, NULL, NULL, NULL);
wind.ws_canvas = GetDC(wind.ws_window);
}
void update_window() {
MSG message;
while (GetMessage(&message, NULL, 0, 0)) {
TranslateMessage(&message);
DispatchMessage(&message);
}
}
Window create_window(char * title, int width, int height) {
wind.title = title;
wind.width = width;
wind.height = height;
wind.running = 1;
init_window();
}
主文件
#include <stdio.h>
// #include "core/gui.h"
#include "core/window.h"
void main() {
create_window("Game Window", 600, 600);
while(1) {
// if(key_pressed("A"))
// printf("A was pressed!");
update_window();
}
}
编辑:
在 printf 末尾加上一个“\n”解决问题
Win api: 使用 TextOut() 或 ExTextOut() 而不是 printf()。您正在写入 HWND 而不是标准 C 句柄。 还使用 Message Box() 而不是 printf 进行调试。 接下来:WM_PAINT,它是序列 BeginPaint...EndPaint。这应该可以帮助您入门。
在 printf 末尾加一个“\n”解决问题