Windows程序设计——GDI字符及图形标准输出标准输出

简介: Windows程序设计——GDI字符及图形标准输出标准输出

以下是完成输出文字的代码部分


#include <Windows.h>    // windows程序所依赖的头文件
#pragma comment(lib,"winmm.lib")
#define WINDOW_WIDTH    800                     // 窗口宽度
#define WINDOW_HEIGHT   600                     // 窗口高度
#define WINDOW_TITLE    L"第三讲:windows标准输出字符与图形"   // 窗口标题名称
HDC g_hdc = NULL;         // 定义全局设备环境句柄
BOOL InitRes(HWND hwnd);      // 资源初始化
VOID PaintFunc(HWND hwnd);    // 绘图函数
BOOL CleaupFunc(HWND hwnd);   // 释放资源
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);  // 窗口过程函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
  // 一、设计完整窗口类型
  WNDCLASSEX windclass = { 0 };
  windclass.cbSize = sizeof(WNDCLASSEX);    // 设计结构体的字节数大小
  windclass.style = CS_HREDRAW | CS_VREDRAW;  // 窗口样式
  windclass.lpfnWndProc = WndProc;      // 指向窗口过程函数的指针
  windclass.cbClsExtra = 0;         // 窗口类的附加内存
  windclass.cbWndExtra = 0;         // 窗口的附加内存
  windclass.hInstance = hInstance;      // 指定包含窗口过程的程序实例句柄
  windclass.hIcon = (HICON)::LoadImage(NULL,L"icon.ico",IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); // 窗口标题图标
  windclass.hCursor = LoadCursor(NULL, IDC_ARROW);    // 指定窗口类的光标句柄
  windclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);    // 指定白色画刷句柄 
  windclass.lpszMenuName = NULL;                    // 窗口菜单
  windclass.lpszClassName = L"CharGraphicDemo";           //  指定窗口类的名称
  // 二、注册窗口类
  if (!RegisterClassEx(&windclass))
    return -1;
  // 三、创建窗口
  HWND hwnd = CreateWindow(L"CharGraphicDemo", WINDOW_TITLE, WS_OVERLAPPEDWINDOW, METRICS_USEDEFAULT, METRICS_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL);
  // 四、显示 更新窗口
  MoveWindow(hwnd, 380, 100,WINDOW_WIDTH,WINDOW_HEIGHT,true);   // 移动窗口
  ShowWindow(hwnd, nShowCmd);
  UpdateWindow(hwnd);
  // 初始化资源 
  if (!InitRes(hwnd))
  {
    MessageBox(hwnd, L"资源初始化失败!", L"提示", 0);
    return FALSE;
  }
  // 添加背景音乐 
  mciSendString(L"Open ./Music/轻音乐-天气预报背景音乐.mp3 alias music", 0, 0, 0);
  mciSendString(L"play music repeat", 0, 0, 0);
  // 五、消息循环过程 
  MSG msg = { 0 };
  while (msg.message != WM_QUIT)
  {
    if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
  }
  // 六、窗口类的注销
  UnregisterClass(L"CharGraphicDemo", windclass.hInstance); // 程序结束 注销类
  return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
  PAINTSTRUCT ps;   // 定义记录变量
  switch (message)
  {
  case WM_PAINT:    // 客户区重绘消息
    g_hdc = BeginPaint(hwnd, &ps);
    InitRes(hwnd);    
    EndPaint(hwnd, &ps);
    ValidateRect(hwnd, NULL);   // 更新客户区的显示
    break;
  case WM_DESTROY:    // 若是窗口销毁消息
    PostQuitMessage(0);   // 向系统表明有线程终止请求,用来响应WM_DESTROY消息
    break;
  default:    // 如果上面所有case条件都不符合,则执行该语句
    return DefWindowProc(hwnd, message, wParam, lParam);  // 调用缺少窗口过程
  }
  return 0;
}
BOOL InitRes(HWND hwnd)   // 资源初始化
{
  g_hdc = GetDC(hwnd);      // 获取设备环境句柄
  PaintFunc(hwnd);
  ReleaseDC(hwnd, g_hdc);   // 释放设备环境句柄 
  return TRUE;
}
VOID PaintFunc(HWND hwnd)   // 绘图函数
{
  HFONT hFont = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, L"微软雅黑"); // 创建字体
  SelectObject(g_hdc, hFont);   // 将字体迁入设备环境句柄
  SetBkMode(g_hdc, TRANSPARENT);    // 文字背景色为透明
  // 定义三段文字字符串
  wchar_t textFirst[] = L"星星之为,可以燎原;数风流人物还看今朝;";
  wchar_t textsecond[] = L"与天奋斗,其乐无穷!与地奋斗,其乐无穷!与人奋斗,其乐无穷!";
  wchar_t textthird[] = L"----------毛主席";
  SetTextColor(g_hdc, RGB(50, 255, 50));
  TextOut(g_hdc, 30, 150, textFirst, wcslen(textFirst));
  SetTextColor(g_hdc, RGB(50, 50, 255));
  TextOut(g_hdc, 30, 200, textsecond, wcslen(textsecond));
  SetTextColor(g_hdc, RGB(50, 150, 50));
  TextOut(g_hdc, 500, 250, textthird, wcslen(textthird));
  DeleteObject(hFont);    // 释放字体对象
}
BOOL CleaupFunc(HWND hwnd)    // 释放资源
{
    // 留给大家自己完成 
  return TRUE;
}


相关文章
|
数据可视化 前端开发 Java
为什么说Windows这么强大呢?— 原来是因为图形化界面
为什么说Windows这么强大呢?— 原来是因为图形化界面
125 0
|
数据可视化 前端开发 Java
打破你对Windows系统的认知?— 原来是因为图形化界面
打破你对Windows系统的认知?— 原来是因为图形化界面
155 0
|
网络协议 Linux 网络安全
Windows远程连接centos7图形化界面,安装xrdp
Windows远程连接centos7图形化界面,安装xrdp
332 0
|
1月前
|
NoSQL Redis 数据安全/隐私保护
Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
文章提供了Redis最流行的图形化界面工具Another Redis Desktop Manager的下载及使用教程,包括如何下载、解压、连接Redis服务器以及使用控制台和查看数据类型详细信息。
118 6
Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
|
1月前
|
NoSQL Redis 数据库
Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载
文章提供了Redis图形化界面工具的下载及使用教程,包括如何连接本地Redis服务器、操作键值对、查看日志和使用命令行等功能。
109 0
Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载
|
3月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
239 0
|
6月前
|
Windows
LabVIEW在Windows平台上的图形导入
LabVIEW在Windows平台上的图形导入
58 0
|
6月前
|
Windows
不让Windows显示语言栏“中”“英”字符的一种方法
【2月更文挑战第6天】本文介绍在Windows 11操作系统中,将任务栏右下角的语言栏的“中”、“英”标识加以隐藏、消除的一种或许可行的方法~
不让Windows显示语言栏“中”“英”字符的一种方法
|
编解码 应用服务中间件 开发工具
Windows平台RTMP|RTSP播放器为什么要兼容GDI绘制
先说结论,Windows平台播放渲染这块,一般来说99%以上的机器都是支持D3D的,实现GDI模式绘制,除了为了好的兼容性外,在远程连接的场景下,D3D创建不成功,需要使用GDI模式。
119 0
|
C# Windows 容器
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序