窗口界面,而不是c中的控制台

我有控制台应用程序在c。 我想转换成窗口应用程序,请引导我,让我可以做到这一点。

您需要采取的步骤概述:

  • 用WinMain替换main
  • 将子系统从控制台更改为窗口
  • 创建一个主窗口或一个对话框(资源编辑器可能会在这里得心应手),以及相应的程序
  • 创建一个消息循环
    • 改变你的程序结构在一个循环中执行(程序应该始终负责)
    • 或者在分离线程中执行“串行控制台”程序,只需将其输出发送到“窗口”

前两个很容易,大部分工作在下一步。 如果您希望窗口只是您自己的控制台复制,则可以设计一个包含一个文本或编辑控件的对话框,并实现一个简单的对话框过程和一个消息循环。 一些代码片段随之而来,但是提供完整的工作示例将超出合理的空间。 如果你了解下面的代码,我想它应该让你开始。 如果没有,恐怕你必须先学习Windows编程基础知识。

对话程序

 HWND consoleEditHWnd;

 static int CALLBACK ConsoleDlgProc(HWND hDlg,UINT消息,WPARAM wParam,LPARAM lParam)
 {
  开关(信息)
   {
    情况WM_INITDIALOG:
     {
       InitWindow((HINSTANCE)hInstApp,hDlg);
       consoleEditHWnd = GetDlgItem(hDlg,IDC_CONSOLE_EDIT);
      返回TRUE;
     }


    情况WM_SIZE:
      如果(consoleEditHWnd)
       {
         RECT矩形;
         GetClientRect(hDlg,&rect);
        的MoveWindow(
           consoleEditHWnd,rect.left,rect.top,
           rect.right  -  rect.left,rect.bottom  -  rect.top,TRUE
         );
       }
      打破;
   }
  返回FALSE;
 }

对话框创建和消息循环

     hwndApp = CreateDialog(hInst,MAKEINTRESOURCE(IDD_CONSOLE),NULL,ConsoleDlgProc);
    的ShowWindow((HWND)hwndApp,SW_SHOW);
     UpdateWindow((HWND)hwndApp);

    味精味精;
     while(PeekMessage(&msg,0,0,0,PM_REMOVE))
     {
      的TranslateMessage(MSG);
       DispatchMessage函数(MSG);
     }

写入控制台

当你想添加一些文本到“控制台”,你可以使用它

   int count = GetWindowTextLengthW(consoleEditHWnd);
  分配一个缓冲区
   GetWindowTextW(consoleEditHWnd,缓冲液,计数+ newTextSize);
   ...追加
   SetWindowTextW(consoleEditHWnd,缓冲液);

这是一个巨大的话题,需要单独讨论。 你可能想学习一些GUI工具包。 Qt或wxWidgets会做(尽管它们是用C ++编写的,而不是C)。 如果您正在进行C跨平台开发,您可以看看GTK +。 如果您计划只编写Windows程序,则可以学习Windows API。 无论你选择哪种方式,都有大量的文档,但是每一种方式都需要大量的学习,这里不能解释。