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日

相关文章

  • SpringBoot @Retryable注解方式

    当我们使用Spring Boot开发应用程序的时候,很有可能会碰到一些需要重试的异常错误,例如数据库连接超时等问题。这时候,我们可以使用Spring Boot提供的@Retryable注解来处理这些异常,并在重试后继续执行程序。 下面是使用@Retryable注解的具体步骤: 第一步:添加依赖 在Spring Boot应用程序中使用@Retryable注解,…

    C 2023年5月23日
    00
  • python中常用的各种数据库操作模块和连接实例

    连接数据库是Python中非常重要的操作之一。Python中有很多数据库操作模块,比如官方的sqlite3模块,以及第三方的MySQLdb和pymongo等模块。下面就对这些模块及其使用做一个详细的介绍和示例说明。 sqlite3模块 官方sqlite3模块是Python内置的模块,它可以通过Python与SQLite数据库进行交互。它允许我们执行SQL语句…

    C 2023年5月23日
    00
  • C语言 strcpy()函数

    当我们需要对一个字符串进行复制的时候,可以使用C语言中的strcpy()函数。本文将详细介绍strcpy()函数的使用方法,并包含两个示例来帮助读者更好地了解其使用。 函数说明 strcpy()函数的原型如下: char *strcpy(char *dest, const char *src); 该函数的功能是将源字符串(src)复制到目标字符串(dest)…

    C 2023年5月9日
    00
  • 制作win2003自动安装盘 集成补丁/Raid及硬件驱动

    制作Win2003自动安装盘需要以下几个步骤: 1. 下载Win2003操作系统光盘镜像文件 首先需要从官网或者其他渠道下载Win2003的操作系统光盘镜像文件,通常为ISO格式的文件,作为后续制作自动安装盘的基础。 2. 下载并安装WinISO软件 WinISO是用于制作光盘镜像的工具软件,可以帮助将Win2003光盘镜像文件转换成ISO格式,方便进行自动…

    C 2023年5月24日
    00
  • layui 上传插件 带预览 非自动上传功能的实例(非常实用)

    这里提供一个完整的实例,使用layui上传插件,其带有预览功能,但是不支持自动上传。 操作步骤 步骤一:引入layui文件 这里以layui的cdn方式为例: <link rel="stylesheet" href="//cdn.bootcss.com/layui/2.5.4/css/layui.min.css"…

    C 2023年5月22日
    00
  • 在线管理数据库 类

    在线管理数据库类 在线管理数据库类是一种用于在网站中对数据库进行 CRUD 操作的工具类,可以提高网站开发的效率和代码复用性。本篇攻略将详细介绍如何使用在线管理数据库类,包括以下内容: 引入在线管理数据库类 初始化在线管理数据库类 实现增删改查操作 示例说明 1. 引入在线管理数据库类 要使用在线管理数据库类,需要先将其引入到项目中。可通过以下方式引入: &…

    C 2023年5月22日
    00
  • C程序 用函数显示两个区间的素数

    下面是“C程序 用函数显示两个区间的素数”的完整使用攻略。 1.功能介绍 此程序通过定义一个函数来显示两个区间内的素数。输入两个整数,程序将找到这两个整数之间所有的素数,并显示出来。 2. 使用方法 2.1 下载程序 将程序的代码复制到你的集成开发环境(IDE)中,并保存到c文件中,例如:prime_numbers.c 2.2 定义输入 在程序的main函数…

    C 2023年5月9日
    00
  • Cocos2d-x中获取系统时间和随机数实例

    获取系统时间: 在 Cocos2d-x 中获取系统时间可以使用 C++ 标准库中的 ctime 头文件,用 std::time() 函数获取当前系统时间的时间戳,再将时间戳转换为字符串以实现格式化输出。 示例代码: #include <ctime> #include <string> … std::time_t now = std…

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