首页 > 其他分享 >GDI简单介绍

GDI简单介绍

时间:2023-04-17 17:46:15浏览次数:31  
标签:stHwnd 介绍 stWndClass 简单 100 GDI sizeof NULL stHdc

https://blog.csdn.net/zhoumin4576/article/details/102565308

对于GDI的理解
GDI:在物理设备上显示图形,可以理解为一个程序(对比有界面的)画图工具软件

2.GDI座标

 

 

 

3.GDI画图

 

4.测试原码GDITest.cpp

#include <windows.h>

LRESULT CALLBACK pfnWndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MSG stMsg;
memset(&stMsg, 0, sizeof (stMsg));
HWND stHwnd;
memset(&stHwnd, 0, sizeof (stHwnd));
WNDCLASS stWndClass;
memset(&stWndClass, 0, sizeof (stWndClass));
const TCHAR szAppName[] = TEXT("SCROLL TEST");

stWndClass.style = CS_HREDRAW | CS_VREDRAW;
stWndClass.lpfnWndProc = pfnWndProc;
stWndClass.cbClsExtra = 0;
stWndClass.cbWndExtra = 0;

stWndClass.hInstance = hInstance;
stWndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
stWndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
stWndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
stWndClass.lpszMenuName = NULL;
stWndClass.lpszClassName = szAppName;

if (!RegisterClass(&stWndClass))
{
MessageBox(NULL, TEXT("Regiester failure"), szAppName, MB_ICONERROR);
return 0;
}

stHwnd = CreateWindow(szAppName,
TEXT("SCROLL TEST"),
WS_OVERLAPPEDWINDOW | WS_VSCROLL /*| WS_HSCROLL*/,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);

ShowWindow(stHwnd, iCmdShow);
UpdateWindow(stHwnd);

while (GetMessage(&stMsg, NULL, 0, 0))
{
TranslateMessage(&stMsg);
DispatchMessage(&stMsg);
}

return stMsg.wParam;
}

LRESULT CALLBACK pfnWndProc(HWND stHwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
{
HDC stHdc;
memset(&stHdc, 0, sizeof (stHdc));
PAINTSTRUCT stPs;
memset(&stPs, 0, sizeof (stPs));
RECT stRect;
memset(&stRect, 0, sizeof (stRect));
POINT astPoint[5] = { { 100, 100 }, { 200, 100 }, { 200, 200 }, { 100, 200 }, { 100, 100 } };
POINT astBezier[4] = { {100, 100}, {200, 150}, {200, 200}, {100, 300} };

switch (uiMsg)
{
case WM_CREATE:

return 0;

case WM_SIZE:

return 0;

case WM_VSCROLL:

return 0;

case WM_PAINT:
stHdc = BeginPaint(stHwnd, &stPs);
GetClientRect(stHwnd, &stRect);
#if 0 //用线画矩形
for (int ixPoint = 0; ixPoint < stRect.right; ixPoint += 100)
{
MoveToEx(stHdc, ixPoint, 0, NULL);
LineTo(stHdc, ixPoint, stRect.bottom);
}
#endif

#if 0 //用线画矩形
//Polyline(stHdc, astPoint, sizeof (astPoint) / sizeof (astPoint[0]));
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
MoveToEx(stHdc, astPoint[0].x, astPoint[0].y, NULL);
PolylineTo(stHdc, astPoint + 1, sizeof (astPoint) / sizeof (astPoint[0]) - 1);
#endif

#if 0 //矩形, 椭圆, 圆角矩形
Rectangle(stHdc, 10, 10, 300, 200); //矩形
Ellipse(stHdc, 10, 300, 300, 500);//椭圆
RoundRect(stHdc, 400, 300, 700, 500, 10, 20);//圆角矩形
#endif

#if 1 //贝塞尔曲线

PolyBezier(stHdc, astBezier, sizeof (astBezier) / sizeof (astBezier[0]));
#endif
EndPaint(stHwnd, &stPs);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;

default:
return DefWindowProc(stHwnd, uiMsg, wParam, lParam);
}
}
5.GDI函式及应用将后续添加(特别对文字,对图片的加载等),GDI及GDI+的对比。

标签:stHwnd,介绍,stWndClass,简单,100,GDI,sizeof,NULL,stHdc
From: https://www.cnblogs.com/Dongmy/p/17326581.html

相关文章

  • web前端tips:ES6部分常用新特性介绍
    ES6(ECMAScript6,也称为ES2015)是JavaScript的一个重要更新版本,于2015年发布。它引入了许多新的语言特性和改进,使得JavaScript变得更加现代化、易读、易维护和更适合大型应用程序的开发。ES6主要的新特性包括:1.块级作用域:ES6引入了let和const关键字,可以用来声明块级作用域的变量和......
  • 开源协议介绍
    世界上的开源许可证(OpenSourceLicense)大概有上百种,今天我们来介绍下几种我们常见的开源协议。大致有GPL、BSD、MIT、Mozilla、Apache和LGPL等。ApacheLicenseApacheLicense(Apache许可证),是Apache软件基金会发布的一个自由软件许可证。ApacheLicence是著名的非盈利开源组织Apach......
  • Cron表达式介绍与示例
     1.概念介绍Cron表达式是一个具有时间含义的字符串,字符串以5~6个空格隔开,分为6~7个域,格式为XXXXXXX。其中X是一个域的占位符。最后一个代表年份的域非必须,可省略。单个域有多个取值时,使用半角逗号,隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符......
  • Dockerfile详细使用、docker私有仓库、dockercompose介绍、dockerpose部署flask+redis
    昨日内容#1容器其他操作1dockerstart容器id2dockerstop容器id3dockerrm容器id4dockerrm`dockerps-aq`#正在运行的容器不能删除5dockerexec容器id命令6dockercp宿主机目录容器id:容器目录#目录要存在7docker......
  • 雨林木风的win10是否好用详细介绍
    我们在安装电脑系统或者是重装系统的时候,有些情况下可能不知道安装的系统去哪里下载最好。目前市面上的系统网站林林总总,那么对于雨林木风的win10好用吗这个问题,小编觉得雨林木风系统是十分绿色和安全的,而且网站内还有很多其他的全面的软件。具体内容就来看下小编是怎么说的吧~......
  • 通过github搭建简单的网站
    正常搭建个网站可能需要服务器和域名,但是有没有不花钱的方法呢,github可以。首先新建个工程,名称随意然后新建个index.html文件做为首页之后点击设定最下面有个GitHubPages选择选择下面的内容,你的网站地址就会生成出来了打开网址https://huyunan.github.io/haha/ ......
  • selenium登录cnblogs、抽屉半自动点赞、xpath的使用、打码平台使用、scrapy介绍
    昨日回顾#1beautifulsoup4使用-xml解析库,用它来解析爬回来的html内容,从中找出我们需要的内容#2遍历文档树-.的使用soup.html.body.p.a-获取属性对象.attrs.get('href')-获取文本对象.textstringstrings-子节点,父节点,兄......
  • scrapy架构介绍、scrapy解析数据、settings相关配置、持久化方案
    上节回顾#1selenium -登录cnblogs,拿到cookie,再打开cnblogs,写入cookie,它就是登录状态-半自动点赞---》selenium生成的cookie,给requests用 -selenium操作浏览器,速度慢-requests速度快-动作链-自动登录12306#2打码平台 -帮我们破......
  • flask信号、flask-script、sqlalchemy介绍和快速使用
    昨日内容回顾#1导出项目依赖pipreqs#2函数和方法的区别#3local对象-并发编程中的一个对象,它可以保证多线程并发访问数据安全-本质原理是:不同的线程,操作的是自己的数据-不支持协程#4自己定义local,支持线程和协程#注意点一:try:......
  • 介绍一款 ABAP 代码搜索工具 RS_ABAP_SOURCE_SCAN 的使用方法
    @目录ABAP代码搜索工具:ABAP报表RS_ABAP_SOURCE_SCAN实际工作中的一个需求:找到SAPCRM产品主数据搜索实现里使用了OPENCURSOR关键字的准确位置笔者曾经写过一篇文章,介绍了如何根据ABAP错误消息找到准确的抛出该错误消息的代码位置:SAP错误消息调试之七种武器:让所有的错误......