我在c中有控制台应用程序。我想转换成窗口应用程序,请指导我,以便我能够实现。
答案 0 :(得分:3)
这是一个需要单独讨论的大话题。您可能想学习一些GUI工具包。 Qt或wxWidgets会做(尽管它们是用C ++编写的,而不是C语言编写的)。如果你正在进行C跨平台开发,你可以看看GTK +。如果您只打算为Windows编写程序,则可以学习Windows API。无论你选择哪种方式,都有很多可用的文档,但每种方式都需要大量的学习,这里无法解释。
答案 1 :(得分:2)
您需要采取的步骤概述:
前两个很容易,最多的工作在于接下来的步骤。如果您希望窗口只是您自己的控制台复制,您可以设计包含一个文本或编辑控件的对话框,并实现一个简单的对话框过程和一个消息循环。下面是一些代码片段,但是提供完整且有效的样本将超出合理的空间。如果你理解下面的代码,我想它应该让你开始。如果没有,恐怕你必须先学习Windows编程基础知识。
HWND consoleEditHWnd; static int CALLBACK ConsoleDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: { InitWindow((HINSTANCE)hInstApp,hDlg); consoleEditHWnd = GetDlgItem(hDlg,IDC_CONSOLE_EDIT); return TRUE; } case WM_SIZE: if (consoleEditHWnd) { RECT rect; GetClientRect(hDlg, &rect); MoveWindow( consoleEditHWnd, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, TRUE ); } break; } return FALSE; }
hwndApp = CreateDialog(hInst, MAKEINTRESOURCE(IDD_CONSOLE), NULL, ConsoleDlgProc); ShowWindow((HWND)hwndApp,SW_SHOW); UpdateWindow((HWND)hwndApp); MSG msg; while( PeekMessage(&msg, 0, 0, 0, PM_REMOVE) ) { TranslateMessage(&msg); DispatchMessage(&msg); }
如果要在“控制台”中添加一些文本,可以使用
进行操作int count = GetWindowTextLengthW(consoleEditHWnd); ... allocate a buffer GetWindowTextW(consoleEditHWnd,buffer,count+newTextSize); ... append SetWindowTextW(consoleEditHWnd,buffer);