21xrx.com
2024-11-05 15:00:18 Tuesday
登录
文章检索 我的文章 写文章
C++窗口设计基础教程
2023-06-28 20:23:23 深夜i     --     --
C++ 窗口设计 基础教程 GUI编程 MFC框架

如果你是一位初学者或者即将学习C++编程语言,那么在本篇文章中,将会为你介绍如何进行基础的窗口设计。C++是一种强大的编程语言,许多现代操作系统和软件平台都运用了它的特性和优势。为了更好地学习这门语言,我们需要理解它如何与图形用户界面(GUI)互动。窗口设计是实现GUI的基础。

一、创建基础的窗口

在开始之前,我们需要准备好一个编程集成环境(IDE)和Windows应用程序编程接口(API)。例如,Visual Studio是一个流行的IDE,它包含了完整的Windows API。另一个可选的IDE是Codeblocks。

接下来,我们将使用Windows API来创建一个基础的窗口。从颜色、大小、主要功能等各个方面,窗口的设计关乎着软件的实际应用效果。下面是一个简单的代码示例:


#include <windows.h>

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);

char szClassName[] = "CodingXiaoGui";

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) {

  HWND hwnd;

  MSG messages;

  WNDCLASSEX wincl;

  wincl.hInstance = hThisInstance;

  wincl.lpszClassName = szClassName;

  wincl.lpfnWndProc = WindowProcedure;

  wincl.style = 0;

  wincl.cbSize = sizeof (WNDCLASSEX);

  wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

  wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

  wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

  wincl.lpszMenuName = NULL;

  wincl.cbClsExtra = 0;

  wincl.cbWndExtra = 0;

  wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

  if (!RegisterClassEx (&wincl))

    return 0;

  

  hwnd = CreateWindowEx (0, szClassName, "CodingXiaoGui's Window",

  WS_OVERLAPPEDWINDOW,

  CW_USEDEFAULT, CW_USEDEFAULT,

  240, 180,

  HWND_DESKTOP, NULL,

  hThisInstance, NULL);

  ShowWindow (hwnd, nCmdShow);

  while (GetMessage (&messages, NULL, 0, 0)) {

    TranslateMessage(&messages);

    DispatchMessage(&messages);

  }

  return messages.wParam;

}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

  switch (message) {

    case WM_DESTROY:

      PostQuitMessage(0);

      break;

    default:

      return DefWindowProc(hwnd, message, wParam, lParam);

  }

  return 0;

}

在这个代码示例中,我们首先定义了一个窗口类,并且在Windows API的注册表中进行注册。之后,我们创建了一个新的窗口,其中包含了标题、窗口样式大小和位置等信息。最后,我们使用消息循环来处理用户的输入,并在用户关闭窗口时结束运行。

二、增加窗口控件

在窗口设计中,控件是指一些代表了一些用户交互功能的对象,比如按钮、进度条、文本框等。要在窗口中增加控件,我们需要使用到Windows API的部分功能。

下面是一个增加一个简单的按钮到前面例子中的代码:


#include <windows.h>

LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);

char szClassName[] = "CodingXiaoGui";

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow) {

  HWND hwnd;

  MSG messages;

  WNDCLASSEX wincl;

  wincl.hInstance = hThisInstance;

  wincl.lpszClassName = szClassName;

  wincl.lpfnWndProc = WindowProcedure;

  wincl.style = 0;

  wincl.cbSize = sizeof (WNDCLASSEX);

  wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);

  wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

  wincl.hCursor = LoadCursor (NULL, IDC_ARROW);

  wincl.lpszMenuName = NULL;

  wincl.cbClsExtra = 0;

  wincl.cbWndExtra = 0;

  wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

  if (!RegisterClassEx (&wincl))

    return 0;

  

  hwnd = CreateWindowEx (0, szClassName, "CodingXiaoGui's Window",

  WS_OVERLAPPEDWINDOW,

  CW_USEDEFAULT, CW_USEDEFAULT,

  240, 180,

  HWND_DESKTOP, NULL,

  hThisInstance, NULL);

  ShowWindow (hwnd, nCmdShow);

  // Add button control

  HWND button = CreateWindow("BUTTON", "Click me",

  WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,

  30, 30, 100, 20,

  hwnd, NULL, hThisInstance, NULL);

  if (!button)

    return 0;

  

  while (GetMessage (&messages, NULL, 0, 0)) {

    TranslateMessage(&messages);

    DispatchMessage(&messages);

  }

  return messages.wParam;

}

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

  switch (message) {

    case WM_COMMAND:

      MessageBox(NULL, "The button was clicked!", "Warning", MB_OK);

      break;

    case WM_DESTROY:

      PostQuitMessage(0);

      break;

    default:

      return DefWindowProc(hwnd, message, wParam, lParam);

  }

  return 0;

}

在这个代码示例中,我们为窗口增加了一个按钮,用于执行一些动作。在创建按钮时,我们需要定义按钮的控制类型、样式、位置、大小和父窗口等信息。然后,我们使用消息处理函数来处理按钮的点击事件,并在单击按钮时显示一个消息框。

三、结论

在本篇文章中,我们介绍了如何使用C++和Windows API来创建和增加控件到一个基础的窗口。这些知识点包含了窗口的基本原理,用于创建窗口、处理消息并增加控件的Windows API函数。掌握这些基础知识后,你可以深入研究更高级的窗口操作,例如使用多线程机制、创建自定义控件、增加图标等。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复