Tôi đang phát xung quanh với một số OpenGL, sử dụng SDL để xử lý cửa sổ/đầu vào, v.v. Hiện tại tôi đang hiển thị bất kỳ thông tin nào tôi muốn xem cho HUD. Vâng, điều này là nhận được quá cồng kềnh, và tôi đã tự hỏi nếu có một cách đơn giản để mở ra một cửa sổ giao diện điều khiển riêng biệt để báo cáo thông tin này cho tôi. Tôi vẫn còn mới để C + + vì vậy hãy dễ dàng trên tôi nếu điều này là một rõ ràng nhất.Gỡ lỗi C++/SDL với cửa sổ bảng điều khiển
Trả lời
Trong trình liên kết -> Hệ thống trong thuộc tính của dự án của bạn, hãy kiểm tra xem Hệ thống con là "Console (/ SUBSYSTEM: CONSOLE)". Điều đó gây ra một cửa sổ giao diện điều khiển riêng biệt được đưa lên khi bạn chạy chương trình của bạn. Nếu điểm nhập hiện tại của bạn không phải là main
, thì bạn sẽ cần phải thay đổi điểm đó nếu bạn thực hiện điều này.
Nếu bạn đang chạy từ một dòng lệnh và sử dụng printf()
, bạn sẽ thấy thông báo đăng xuất vào cửa sổ đầu cuối của mình. Nếu không, bạn có thể đăng nhập vào một tệp và sử dụng tail -f
trên các hộp kiểu * nix để xem đầu ra khi nó xuất hiện.
Bạn đang sử dụng môi trường nào? Hầu hết các IDE sẽ hiển thị đầu ra này trong các cửa sổ đầu ra gỡ lỗi của chúng.
Làm cách nào để tạo cửa sổ bảng điều khiển này? Hiện tại tôi đang làm việc với một cửa sổ được tạo bởi SDL. – grep
Bạn đang làm việc trên nền tảng nào? Nếu đó là cửa sổ, chỉ cần chạy cmd.exe và chạy chương trình của bạn từ đó, trên Mac sử dụng Terminal hoặc trên linux bất kỳ thiết bị đầu cuối của sự lựa chọn của bạn. –
Mã sau đây dành cho Windows. Tôi luôn nhận thấy có ích để giữ xung quanh khả năng để tạo ra một cửa sổ giao diện điều khiển theo yêu cầu:
int hConHandle;
intptr_t lStdHandle;
CONSOLE_SCREEN_BUFFER_INFO coninfo;
FILE *fp;
// allocate a console for this app
AllocConsole();
// set the screen buffer to be big enough to let us scroll text
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
coninfo.dwSize.Y = 500;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
// redirect unbuffered STDOUT to the console
lStdHandle = (intptr_t)GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
// redirect unbuffered STDIN to the console
lStdHandle = (intptr_t)GetStdHandle(STD_INPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "r");
*stdin = *fp;
setvbuf(stdin, NULL, _IONBF, 0);
// redirect unbuffered STDERR to the console
lStdHandle = (intptr_t)GetStdHandle(STD_ERROR_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stderr = *fp;
setvbuf(stderr, NULL, _IONBF, 0);
// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog point to console as well
std::ios::sync_with_stdio();
//Keep our window in focus
SetForegroundWindow(m_hWnd); // Slightly Higher Priority
SetFocus(m_hWnd); // Sets Keyboard Focus To The Window
Mã này giả định rằng các HWND
là trong một biến gọi là m_hWnd
; nó được sao chép từ một trình bao bọc lớp mà tôi sử dụng. Tuy nhiên, cách bạn nhận được số HWND
từ SDL tùy thuộc vào bạn.
Để giải phóng giao diện điều khiển, gọi đây là:
FreeConsole();
AllocConsole
và FreeConsole
là hàm API Win32.
- 1. Làm cách nào tôi có thể ghi vào cửa sổ bảng điều khiển để gỡ lỗi?
- 2. cập nhật cửa sổ bảng điều khiển với java
- 3. Ẩn cửa sổ bảng điều khiển từ Process.Start C#
- 4. GCC/C cách ẩn cửa sổ bảng điều khiển?
- 5. Tắt hiển thị cửa sổ bảng điều khiển
- 6. tiêu đề cửa sổ bảng điều khiển c
- 7. Nhúng cửa sổ Bảng điều khiển bên trong Cửa sổ WPF
- 8. Hiển thị/Ẩn cửa sổ bảng điều khiển của ứng dụng giao diện điều khiển C#
- 9. Cửa sổ chương trình gỡ lỗi sẽ không đóng
- 10. Điều khiển không cửa sổ là gì?
- 11. Làm cách nào để ngăn cửa sổ bảng điều khiển đóng khi chạy ứng dụng bảng điều khiển?
- 12. Làm cách nào để nói với cmake không tạo cửa sổ bảng điều khiển?
- 13. Viết đến cùng một vị trí trong cửa sổ bảng điều khiển với java
- 14. Cửa sổ bảng điều khiển AJAX với hỗ trợ ANSI/VT100?
- 15. Eclipse PDT gỡ lỗi ứng dụng web: đánh giá biểu thức trong bảng điều khiển
- 16. đưa cửa sổ bảng điều khiển lên phía trước trong C#
- 17. Javaw vẫn tạo cửa sổ bảng điều khiển; Tại sao điều này?
- 18. Chrome: Lỗi có trong mã được gọi từ cửa sổ kích hoạt bảng điều khiển dành cho nhà phát triển.onerror?
- 19. Gỡ lỗi với các điểm ngắt từ bảng điều khiển trong Python
- 20. Cách in sổ đăng ký tháo gỡ trong bảng điều khiển Xcode
- 21. Cửa sổ bảng điều khiển không thể bị giết bằng cách đóng hoặc qua Task Manager
- 22. Cách thêm UserControl vào Bảng điều khiển trên Cửa sổ WPF
- 23. gỡ lỗi đa luồng từ cửa sổ ngay lập tức
- 24. Bảng điều khiển Dock .NET?
- 25. Đầu ra In Đẹp theo định dạng cây ngang trong cửa sổ bảng điều khiển
- 26. Thay đổi kích thước của Cửa sổ Bảng điều khiển sẽ ném ArgumentOutOfRangeException
- 27. Cách thay đổi ứng dụng bảng điều khiển thành ứng dụng biểu mẫu cửa sổ?
- 28. Làm cách nào để in thuộc tính của đối tượng vào Bảng điều khiển gỡ lỗi trong Xcode?
- 29. Ẩn cửa sổ giao diện điều khiển của ứng dụng Python GUI với py2exe
- 30. .NET: Cách chuyển đổi biểu mẫu cửa sổ thành điều khiển cửa sổ
Làm thế nào điều này áp dụng nếu tôi, ví dụ, mã ứng dụng của tôi trong một trình soạn thảo văn bản và sau đó tạo một tệp thực thi thông qua Cmake? – Speldosa
@Speldosa: Bạn cần phải tìm tùy chọn CMake cho phép bạn chuyển cờ liên kết và sau đó chuyển "/ SUBSYSTEM: CONSOLE" đến trình liên kết. –
set_target_properties (youapplication PROPERTIES LINK_FLAGS "/ SUBSYSTEM: CONSOLE") hoặc làm: set (CMAKE_EXE_LINKER_FLAGS "/ SUBSYSTEM: CONSOLE") làm cài đặt chung. –