win32 字体变换与窗口同大同小

简介: [cpp] view plaincopy   #include    #include "res/resource.h"         LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARA...
[cpp]  view plain copy
 
  1. #include <windows.h>  
  2. #include "res/resource.h"  
  3.   
  4.   
  5. LRESULT CALLBACK WinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);  
  6. BOOL InitApp(HINSTANCE hInstance, LPCSTR szClassName);  
  7. BOOL InitInstance(HINSTANCE hInstance, LPCSTR szClassName, int nCmdShow);  
  8.   
  9.   
  10. int WINAPI WinMain(   
  11.      IN HINSTANCE hInstance,  
  12.      IN HINSTANCE hPrevInstance,   
  13.      IN LPSTR lpCmdLine,   
  14.      IN int nShowCmd  
  15.      )  
  16. {  
  17.     MSG msg;  
  18.     char szClassName[] = "FontFace";  //窗口名  
  19.     //注册窗口类  
  20.     if(!InitApp(hInstance, szClassName))  
  21.         return 0;  
  22.     //初始化窗口  
  23.     if( !InitInstance(hInstance, szClassName, nShowCmd) )  
  24.         return 0;  
  25.   
  26.   
  27.     while(GetMessage(&msg, NULL, NULL, NULL))  
  28.     {  
  29.         TranslateMessage(&msg);  //消息解释  
  30.         DispatchMessage(&msg);   //消息传送  
  31.     }  
  32.     return (int)msg.wParam;  
  33. }  
  34.   
  35.   
  36. LRESULT CALLBACK WinProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )  
  37. {  
  38.     PAINTSTRUCT ps;  
  39.     HDC hdc;  
  40.     HFONT hFont, hOldFont;  
  41.     RECT rect;  
  42.     char *str = "徐国先";  
  43.     int width;  
  44.     int height;  
  45.     switch( uMsg )  
  46.     {  
  47.     case WM_PAINT:  
  48.         hdc = BeginPaint(hwnd, &ps);  
  49.         GetClientRect(hwnd, &rect);  
  50.         width = (rect.right-20)/(int)strlen(str);  
  51.         height = rect.bottom-20;  
  52.         hFont = CreateFont(  
  53.             height,      //字体的逻辑高度  
  54.             width,       //逻辑平均字符宽度  
  55.             0,           //与水平线的角度  
  56.             0,           //基线方位角度  
  57.             FW_REGULAR,  //字形:常规  
  58.             FALSE,       //字形:斜体  
  59.             FALSE,       //字形:下划线  
  60.             FALSE,       //字形:粗体  
  61.             GB2312_CHARSET,          //字符集  
  62.             OUT_DEFAULT_PRECIS,      //输出精度  
  63.             CLIP_DEFAULT_PRECIS,     //剪截精度  
  64.             PROOF_QUALITY,           //输出品质  
  65.             FIXED_PITCH | FF_MODERN, //倾斜度  
  66.             "隶书"                   //字体  
  67.             );   
  68.         hOldFont = (HFONT)SelectObject(hdc, hFont);       //选择字体  
  69.         SetTextColor(hdc, 0xC0C0C0);  
  70.         TextOut(hdc, 10, 10, str, (int)strlen(str));  
  71.         SelectObject(hdc, hOldFont);                      //选择旧字体  
  72.         DeleteObject(hFont);                              //删除新字体  
  73.         EndPaint(hwnd, &ps);  
  74.         break;  
  75.   
  76.   
  77.     case WM_DESTROY:  
  78.         PostQuitMessage(0);  
  79.         break;  
  80.     default:  
  81.        return DefWindowProc(hwnd, uMsg, wParam, lParam);  
  82.     }  
  83.     return 0;  
  84. }  
  85.   
  86.   
  87. BOOL InitApp(HINSTANCE hInstance, LPCSTR szClassName)  
  88. {  
  89.     WNDCLASS wndClass;  
  90.     ZeroMemory(&wndClass, sizeof(wndClass));  
  91.   
  92.   
  93.     wndClass.style          = CS_VREDRAW|CS_HREDRAW;  
  94.     wndClass.cbClsExtra     = 0;  
  95.     wndClass.cbWndExtra     = 0;  
  96.     wndClass.hInstance      = hInstance;  
  97.     wndClass.hCursor        = LoadCursor(hInstance, IDC_ARROW);  
  98.     wndClass.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST));  
  99.     wndClass.hbrBackground  = (HBRUSH)GetStockObject(COLOR_BTNFACE);  
  100.     wndClass.lpfnWndProc    = (WNDPROC)WinProc;  
  101.     wndClass.lpszClassName  = (LPCSTR)szClassName;  
  102.     wndClass.lpszMenuName   = NULL;  
  103.     return RegisterClass(&wndClass);  
  104. }  
  105.   
  106.   
  107. BOOL InitInstance(HINSTANCE hInstance, LPCSTR szClassName, int nCmdShow)  
  108. {  
  109.     HWND hwnd;  
  110.     hwnd = CreateWindow(  
  111.         szClassName,  
  112.         "Sdk 字体变换",  
  113.         WS_OVERLAPPEDWINDOW,  
  114.         CW_USEDEFAULT, CW_USEDEFAULT,  
  115.         400, 300,  
  116.         NULL,  
  117.         NULL,  
  118.         hInstance,  
  119.         NULL  
  120.         );  
  121.     //  
  122.     if (!hwnd) return FALSE;  
  123.     ShowWindow(hwnd, nCmdShow);  
  124.     UpdateWindow(hwnd);  
  125.     return TRUE;  
  126. }  

该代码参考网上学习代码

目录
相关文章
|
Serverless API
【MCP教程系列】在阿里云百炼,实现超级简单的MCP服务部署
阿里云百炼推出业界首个全生命周期MCP服务,支持一键在线注册托管。企业可将自研或外部MCP服务部署于阿里云百炼平台,借助FC函数计算能力,免去资源购买与服务部署的复杂流程,快速实现开发。创建MCP服务仅需四步,平台提供预置服务与自定义部署选项,如通过npx安装代码配置Flomo等服务。还可直接在控制台开通预置服务,体验高效便捷的企业级解决方案。
2980 0
|
SQL 机器学习/深度学习 自然语言处理
Text-to-SQL技术演进 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法剖析
本文介绍了Text-to-SQL的技术演进,并对OpenSearch-SQL方法进行剖析。
1574 8
|
网络虚拟化 网络架构 内存技术
vlan的作用及配置命令
vlan的作用及配置命令
|
移动开发 前端开发 rax
开放下载!1500页,40万字,淘系技术2020总结黑皮书来了
作为阿里巴巴新零售技术的王牌军,基于淘系丰富的商业和业务形态,淘系技术在大前端、音视频、端智能、用户增长、客户端架构、服务端架构、云原生、技术质量以及AI等技术领域有着丰富的思考和沉淀。淘系技术将2020一整年的精华内容梳理合并,重磅推出《技术人的百宝黑皮书》,本文从前沿技术、职场成长经验及学习问答、技术人必读书单、淘系经典开源项目以及2020淘系顶会paper等五个方面进行简要介绍。
开放下载!1500页,40万字,淘系技术2020总结黑皮书来了
|
开发工具 iOS开发 Ruby
Mac上CocoaPods安装流程
Mac上CocoaPods安装流程
484 0
Mac上CocoaPods安装流程
|
Java Spring 容器
springboot原理实战(3)-- spring扩展接口BeanPostProcessor,BeanFactoryPostProcessor
springboot原理实战(3)-- spring扩展接口BeanPostProcessor,BeanFactoryPostProcessor
406 0
springboot原理实战(3)-- spring扩展接口BeanPostProcessor,BeanFactoryPostProcessor
2022最新Kali下载及配置(root用户、源)
2022最新Kali下载及配置(root用户、源)
1250 0
2022最新Kali下载及配置(root用户、源)
|
Java Maven 容器
Ognl 使用实例手册
上一篇博文介绍了ongl的基础语法,接下来进入实际的使用篇,我们将结合一些实际的case,来演示ognl究竟可以支撑到什么地步
590 0
|
缓存 移动开发 JavaScript
前端面试---Vue部分考点梳理
前端面试---Vue部分考点梳理
前端面试---Vue部分考点梳理
|
监控 定位技术 网络安全
关于在公安等纯内网环境部署GPSBD卫星定位监控系统的一些思考
公安内网如何部署GPSBD定位监控系统呢,内网环境和公网环境对部署系统有哪些要注意的地方呢
984 0
关于在公安等纯内网环境部署GPSBD卫星定位监控系统的一些思考