VC中控制台程序创建窗口的实例方法

创建控制台程序的时候,需要手动创建一个窗口的实例,来显示程序的输出信息。下面是创建VC中控制台程序的窗口实例的完整攻略:

  1. 首先需要包含Windows API的头文件"Windows.h",和"CRT"的头文件"Stdio.h";
#include <stdio.h>
#include <Windows.h>
  1. 在控制台程序中,一般是通过WinMain函数或main函数来执行程序的,我们可以定义一个WinMain函数来创建窗口,并在窗口中输出信息。这里我们主要使用到Windows API中的CreateWindow()函数来创建窗口实例,初始化窗口信息,以及定义窗口处理函数并接收Windows消息,再根据消息类型进行相应的处理。

下面是一个简单的示例:

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) 
{
    WNDCLASSEX wce;
    HWND hwnd;
    MSG msg;

    //定义窗口类
    wce.cbSize = sizeof(WNDCLASSEX);
    wce.style = CS_HREDRAW | CS_VREDRAW;
    wce.lpfnWndProc = WndProc;
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hInstance = hInstance;
    wce.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    wce.hCursor = LoadCursor(NULL,IDC_ARROW);
    wce.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wce.lpszMenuName = NULL;
    wce.lpszClassName = "Window Class";
    wce.hIconSm = LoadIcon(NULL,IDI_APPLICATION);

    //注册窗口类
    RegisterClassEx(&wce);

    //创建窗口
    hwnd = CreateWindowEx(
      0,
      "Window Class",
      "Hello,World!",
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, CW_USEDEFAULT,
      CW_USEDEFAULT, CW_USEDEFAULT,
      NULL,
      NULL,
      hInstance,
      NULL);

    //显示窗口
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    //消息循环
    while ( GetMessage(&msg, NULL, 0, 0) )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

//窗口处理函数定义
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

上面的示例中,首先定义了一个WNDCLASSEX结构体,来初始化窗口类的信息,然后注册窗口类。在创建窗口的时候,传递的参数包括窗口类的名字,窗口标题,风格等。然后定义了一个消息循环,来处理窗口事件。窗口处理函数WndProc接受到Windows消息后,根据不同的消息类型进行相应的处理。在示例中,当用户单击关闭按钮时,系统会向窗口发送WM_CLOSE消息,程序就会调用WindowProc函数来处理这个消息,销毁窗口。当应用程序(通过PostQuitMessage函数)向系统发送WM_QUIT消息来停止消息循环时,程序将会接收到WM_DESTROY消息,这时也需要调用WindowProc来处理这个消息,释放相关资源并真正退出程序。

  1. 另外一个示例是在控制台程序中创建一个简单的窗口,在窗口中显示一张图像。代码如下:
#include <stdio.h>
#include <Windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) 
{
    WNDCLASSEX wce;
    HWND hwnd;
    MSG msg;

    //定义窗口类
    wce.cbSize = sizeof(WNDCLASSEX);
    wce.style = 0;
    wce.lpfnWndProc = WndProc;
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hInstance = hInstance;
    wce.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    wce.hCursor = LoadCursor(NULL,IDC_ARROW);
    wce.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wce.lpszMenuName = NULL;
    wce.lpszClassName = "Window Class";
    wce.hIconSm = LoadIcon(NULL,IDI_APPLICATION);

    //注册窗口类
    RegisterClassEx(&wce);

    //创建窗口
    hwnd = CreateWindowEx(
      0,
      "Window Class",
      "My Image Window",
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, CW_USEDEFAULT,
      CW_USEDEFAULT, CW_USEDEFAULT,
      NULL,
      NULL,
      hInstance,
      NULL);

    //显示窗口
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    //消息循环
    while ( GetMessage(&msg, NULL, 0, 0) )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

//窗口处理函数定义
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    HBITMAP hBitmap;
    HINSTANCE hInstance;
    switch(msg)
    {
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);

            hInstance = GetModuleHandle(NULL);
            hBitmap = LoadBitmap(hInstance,"res\\dog.bmp");

            // 使用StretchBlt函数绘制图像
            StretchBlt(hdc,0,0,300,300,
              hBitmap,0,0,260,245,SRCCOPY);

            EndPaint(hwnd,&ps);
            break;
        case WM_CLOSE:
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

在这个示例中,我们在窗口处理函数WndProc中,处理WM_PAINT消息,在这个消息中我们绘制了一个位图文件从而在窗口中显示图像。具体的绘图函数是StretchBlt函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:VC中控制台程序创建窗口的实例方法 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++ Coroutine简单学习教程

    C++ Coroutine简单学习教程 协程是一种用户态线程,可以避免线程切换等开销,提高代码效率。C++20引入了支持协程的新关键字co_await、co_yield、co_return等,可以方便地实现协程。本教程将介绍C++协程的基本使用方法。 环境准备 在编译器中开启协程支持,需要使用/await选项。 使用clang++编译示例代码: clang+…

    C 2023年5月23日
    00
  • C++中基类和派生类之间的转换实例教程

    C++中基类和派生类之间的转换实例教程 什么是基类和派生类呢? 在C++中,基类和派生类是面向对象编程中的两个基本概念。基类通常是一个抽象的概念,它定义了一些通用的特征,在派生类中被继承和扩展。派生类则是从基类派生出来的类,它继承了基类的特性,并在此基础上增加了一些自己的特性。 转换示例 我们来看一个实际的示例,假设现在我们有一个基类People,和一个派生…

    C 2023年5月22日
    00
  • PHP基于CURL发送JSON格式字符串的方法示例

    PHP基于CURL发送JSON格式字符串的方法 在PHP中,我们可以使用CURL库来处理HTTP请求,包括发送POST请求并带上JSON格式字符串。下面是一个发送JSON格式字符串的示例代码: // JSON数据 $data = array( ‘name’ => ‘John’, ’email’ => ‘john@example.com’ ); $…

    C 2023年5月23日
    00
  • 基于一致性hash算法 C++语言的实现详解

    下面是 “基于一致性Hash算法C++语言的实现详解” 的攻略。 简介 一致性Hash算法是分布式系统中常用的一种负载均衡算法。C++ 语言是一种高效的编程语言,有着广泛的应用。本篇攻略将通过分析一致性Hash算法的实现,详细讲解如何在C++语言中实现这一算法,并给出两个示例说明。 一致性Hash算法的实现 步骤一:将服务器节点映射到一个环上 一致性Hash…

    C 2023年5月22日
    00
  • C++如何调用matlab函数

    要在C++中调用Matlab函数,可以使用Matlab Engine API提供的函数。Matlab Engine API是Matlab提供的一组C和C++函数,使得C++程序可以调用Matlab引擎并执行Matlab函数。 以下是在Visual Studio 2019中如何配置和调用Matlab的步骤: 1. 安装Matlab和Visual Studio …

    C 2023年5月23日
    00
  • 在1个Matlab m文件中定义多个函数直接运行的操作方法

    在一个 Matlab 的 m 文件中定义多个函数可以大大提高代码的可读性和复用性,以下是操作方法的具体攻略: 在一个 Matlab 的 m 文件中定义多个函数,需要注意每个函数的开头应有相应的函数名和输入/输出参数的定义。例如: function y = func1(x) % This is function 1 y = x + 1; end functio…

    C 2023年5月30日
    00
  • C++ 中的类型详细

    C++ 中的类型详细 数据类型的定义 在C++中,常用的数据类型包括: 基本类型:整型、字符型、布尔类型、浮点型等。 构造类型:数组、结构体、联合体、枚举等。 指针类型:指向其他变量的指针。 引用类型:引用是某个变量的别名。 类类型:类是一个自定义的数据类型,可以包含属性和方法。 基本数据类型 C++中的基本数据类型包括:整型、浮点型、字符型、布尔类型等。 …

    C 2023年5月22日
    00
  • C++OOP对象和类的详细讲解

    C++OOP对象和类的详细讲解 什么是对象和类? 在C++中,对象是指一个特定类的实例,其定义中包含了类的数据成员和函数成员。类是一种用户自定义的数据类型,可以定义包括数据成员和函数成员在内的各种内容,表示某一类似真实世界中的实体。 如何定义类和对象? 定义一个类,需要使用class关键字,紧接着是类名和一对大括号,“{}”内部定义类的数据成员和函数成员。 …

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部