初探GDI——基本框架(文字输出)
来源:互联网 发布:微信for windows 编辑:程序博客网 时间:2024/06/11 22:37
由之前彩色随机矩形线条获得启发,今日学习文字输出时,使用随机色定义字体颜色,获得彩色变换文字输出。
//随机字体颜色 SetTextColor(g_hdc, RGB(rand() % 256, rand() % 256, rand() % 256));
由于WM_PAINT消息目前仅在窗口大小发生改变时触发,故获得炫彩效果需拖动窗口边框。
在定位字体位置时,观察到TextOut()函数输出位置定位在字符串左上角。同时发现通过MoveWindow()函数设置窗口位置、大小时,设置的大小为窗口区大小,并非之前以为的客户区大小。之后会检索窗口区大小的设置问题。
为求基本框架熟记,以及提高代码书写水平,每次新建项目书写基本框架均使用手打方式,不采用复制之前框架的做法。
源代码:
/*学习使用GDI文字输出2017/08/19*///头文件#include <Windows.h>#include <time.h> //生成随机数//全局函数声明LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);bool Game_Init(HWND hwnd);void Game_Paint(HWND hwnd);bool Game_Cleanup(HWND hwnd);//全局变量HDC g_hdc = 0;//入口函数int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //创建窗口类 WNDCLASSEX wndClass = { 0 }; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.cbSize = sizeof(WNDCLASSEX); wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); wndClass.hCursor = LoadCursor(nullptr, IDC_ARROW); wndClass.hIcon = LoadIcon(nullptr, IDI_APPLICATION); wndClass.hInstance = hInstance; wndClass.lpfnWndProc = WndProc; wndClass.lpszClassName = L"GDI_Text"; wndClass.lpszMenuName = nullptr; wndClass.style = CS_HREDRAW | CS_VREDRAW; //注册窗口类 if ( !RegisterClassEx(&wndClass) ) { MessageBox(nullptr, L"窗口类创建失败!", L"", MB_OK); return -1; } //创建窗口 HWND hwnd = CreateWindow(L"GDI_Text", L"文字输出演示", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, nullptr, nullptr, hInstance, nullptr); //显示刷新窗口 ShowWindow(hwnd, nCmdShow); MoveWindow(hwnd, 0, 0, 800, 600, true); UpdateWindow(hwnd); Game_Init(hwnd); //消息循环 MSG msg = { 0 }; while (msg.message!=WM_QUIT) { if (PeekMessage(&msg,0,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } //注销窗口类 UnregisterClass(L"GDI_Text", hInstance); return 0;}//全局函数定义LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ PAINTSTRUCT paintstruct; switch (message) { //如果窗口刷新,调用Game_Paint重绘画面 case WM_PAINT: g_hdc = BeginPaint(hwnd, &paintstruct); Game_Paint(hwnd); EndPaint(hwnd, &paintstruct); ValidateRect(hwnd, nullptr); break; case WM_CLOSE: if (IDYES == MessageBox(hwnd, L"是否退出程序?", L" ", MB_YESNO)) DestroyWindow(hwnd); break; case WM_DESTROY: Game_Cleanup(hwnd); PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); }}bool Game_Init(HWND hwnd){ //设置随机数种子 srand((unsigned)time(nullptr)); Game_Paint(hwnd); return true;}void Game_Paint(HWND hwnd){ g_hdc = GetDC(hwnd); wchar_t text1[] = L"我就试试"; //设置字体 HFONT hFont = CreateFont(80, 0, 0, 0, 0, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, L"幼圆"); SelectObject(g_hdc, hFont); //设置字体透明背景 SetBkMode(g_hdc, TRANSPARENT); //随机字体颜色 SetTextColor(g_hdc, RGB(rand() % 256, rand() % 256, rand() % 256)); TextOut(g_hdc, 0, 50, text1, wcslen(text1)); ReleaseDC(hwnd, g_hdc);}bool Game_Cleanup(HWND hwnd){ return true;}
阅读全文
0 0
- 初探GDI——基本框架(文字输出)
- 初探GDI——基本框架(几何绘图)
- 初探GDI——基本框架(载入位图)
- gdi、gdi+计算输出文字的长度
- GDI+ C# 画图 、 输出文字
- GDI+基础编程 输出文字
- GDI+ - 图形编程【输出文字】
- Android GDI基本框架
- 第四章 输出文字(绘制和更新,GDI 简介)
- 【转】VB6 GDI+ 入门教程(4)—— 文字绘制
- GDI+ 输出文字 贴图 矩形 画线
- GDI学习笔记 输出文字与图形
- GDI+ 画刷、矩阵、基本绘图函数、文字、图像
- GDI+ 画刷、矩阵、基本绘图函数、文字、图像
- HTML(7)——文字输出方向
- (C#)GDI+绘制垂直文字
- tty初探—uart驱动框架分析(二)uart_add_one_port
- Objective-C初探-Objective-C NSLog 分行文字输出
- 六大设计原则之里式替换原则
- linux的一些使用
- 可以传中文参数的自定义http协议请求方式
- 流行编程语言的详细对比(5)--异常处理
- 嵌入式开发中对(*(volatile unsigned long *)) 的理解
- 初探GDI——基本框架(文字输出)
- MySQL写压力性能监控与调优
- iptables
- C和指针第三章 笔记
- linux_ubantu系统搭建项目环境(mysql)
- 前端上传多张图片 (ajaxfileupload.js)
- strace跟踪进程
- EasyPlayer_Android RTSP安卓播放器直播画面卡在第一帧问题修复
- [GIS] 坐标系