win32SDK中使用图片的api

天道酬勤系列之创建一个基本的基于Win32 SDK应用程序 创建一个基本的基于Win32 SDK应用程序 我们这而已经准备好了一个基本的SDK应用程序,在vc++6.0中新建一个简单的Win32 Application,名为SDKApplication。用如下代码将原来的代码覆盖: #pragma comment(lib,"kernel32.lib") #pragma comment(lib,"user32.lib") #pragma comment... 阅读详情

Win32SDK.h

[cpp]  view plain copy
  1. #pragma once  
  2. #include <windows.h>  
  3. #include <tchar.h>  
  4. #include <assert.h>  
  5. #include <GdiPlus.h>  
  6. #include <AtlImage.h>  
  7. #pragma comment(lib,"gdiplus.lib")  
  8.   
  9. //命名空间  
  10. using namespace Gdiplus;  
  11.   
  12. //绘画模式  
  13. #define DRAW_MODE_SPREAD            0                                   //平铺模式  
  14. #define DRAW_MODE_CENTENT           1                                   //居中模式  
  15. #define DRAW_MODE_ELONGGATE         2                                   //拉伸模式  
  16.   
  17.   
  18. //全局变量定义  
  19. CImage          m_Imagebmp;             //bmp图片  
  20. Image *         m_pImage=NULL;          //png图片  
  21. HWND            g_hwnd;                 //窗口句柄                    
  22. TCHAR           szWindowClass[]=TEXT("哈哈");  
  23.   
  24.   
  25. //全局函数定义  
  26.   
  27. //窗口回调  
  28. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);  
  29. //创建事件  
  30. bool OnCreate(HWND hwnd);  
  31. //绘画背景  
  32. VOID DrawViewImage(HDC DC, CImage & BitImage, BYTE cbDrawMode);  
  33. //绘画PNG图像  
  34. bool DrawImagePng(HDC DC, INT nXPos, INT nYPos);  


Win32SDK.cpp

[cpp]  view plain copy
  1. #include "Win32SDK.h"  
  2.   
  3. int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)  
  4. {  
  5.     WNDCLASSEX wcex={0};  
  6.     wcex.cbSize = sizeof(WNDCLASSEX);  
  7.     wcex.style          = CS_HREDRAW | CS_VREDRAW;  
  8.     wcex.lpfnWndProc    = WndProc;  
  9.     wcex.cbClsExtra     = 0;  
  10.     wcex.cbWndExtra     = 0;  
  11.     wcex.hInstance      = hInstance;  
  12.     wcex.hIcon          = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));  
  13.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);  
  14.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);  
  15.     wcex.lpszMenuName   = NULL;  
  16.     wcex.lpszClassName  = szWindowClass;  
  17.     wcex.hIconSm        = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));  
  18.     RegisterClassEx(&wcex);  
  19.   
  20.     HWND hWnd;  
  21.     hWnd = CreateWindow(szWindowClass, TEXT("标题"), WS_OVERLAPPEDWINDOW,0, 0, 600, 400, NULL, NULL, hInstance, NULL);  
  22.     if (!hWnd)return FALSE;  
  23.   
  24.     ShowWindow(hWnd, nCmdShow);  
  25.     UpdateWindow(hWnd);  
  26.   
  27.     MSG msg={0};  
  28.     while (GetMessage(&msg, NULL, 0, 0))  
  29.     {  
  30.         TranslateMessage(&msg);  
  31.         DispatchMessage(&msg);  
  32.     }  
  33.     return (int) msg.wParam;  
  34. }  
  35.   
  36. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)  
  37. {  
  38.     int wmId, wmEvent;  
  39.     PAINTSTRUCT ps;  
  40.     HDC hdc;  
  41.   
  42.     switch (message)  
  43.     {  
  44.     case WM_CREATE:  
  45.             OnCreate(hWnd);break;  
  46.     case WM_COMMAND:  
  47.         {  
  48.             wmId    = LOWORD(wParam);  
  49.             wmEvent = HIWORD(wParam);  
  50.             // 分析菜单选择:  
  51.             switch (wmId)  
  52.             {  
  53.             case IDOK:break;  
  54.             default:  
  55.                 return DefWindowProc(hWnd, message, wParam, lParam);  
  56.             }  
  57.         }  
  58.         break;  
  59.     case WM_PAINT:  
  60.         {  
  61.             hdc = BeginPaint(hWnd, &ps);  
  62.             // TODO: 在此添加任意绘图代码...  
  63.             DrawViewImage(hdc,m_Imagebmp,DRAW_MODE_CENTENT);  
  64.             DrawImagePng(hdc,0,0);  
  65.             EndPaint(hWnd, &ps);  
  66.         }  
  67.         break;  
  68.     case WM_DESTROY:  
  69.         PostQuitMessage(0);  
  70.         break;  
  71.     default:  
  72.         return DefWindowProc(hWnd, message, wParam, lParam);  
  73.     }  
  74.     return 0;  
  75. }  
  76.   
  77. bool OnCreate(HWND hwnd)  
  78. {  
  79.     g_hwnd=hwnd;  
  80.   
  81.     //窗口居中  
  82.     int x=GetSystemMetrics(SM_CXSCREEN);  
  83.     int y=GetSystemMetrics(SM_CYSCREEN);  
  84.   
  85.     RECT WindowRect;  
  86.     GetWindowRect(hwnd,&WindowRect);  
  87.     int cx=(x-WindowRect.right)/2;  
  88.     int cy=(y-WindowRect.bottom)/2;  
  89.     SetWindowPos(hwnd,NULL,cx,cy,NULL,NULL,SWP_SHOWWINDOW|SWP_NOSIZE);  
  90.   
  91.     //加载 bmp文件  
  92.     m_Imagebmp.Load(TEXT("res\\bmp\\VIEW_BACK.bmp"));  
  93.   
  94.   
  95.     //加载 png文件  
  96.     CT2CW strFileName(TEXT("res\\png\\READY.png"));  
  97.     m_pImage=Image::FromFile((LPCWSTR)strFileName);  
  98.     //错误判断  
  99.     if ((m_pImage==NULL)||(m_pImage->GetLastStatus()!=Ok))   
  100.     {  
  101.         try { delete m_pImage; } catch (...) { assert(FALSE); } m_pImage=NULL;  
  102.         return false;  
  103.     }  
  104.   
  105.     return true;  
  106. }  
  107.   
  108.   
  109. //绘画背景  
  110. VOID DrawViewImage( HDC DC, CImage & BitImage, BYTE cbDrawMode )  
  111. {  
  112.     //获取位置  
  113.     CRect rcClient;  
  114.     GetClientRect(g_hwnd,&rcClient);  
  115.   
  116.     //无效区域  
  117.     RECT rcDirty={0};  
  118.     GetClipBox(DC,&rcDirty);  
  119.   
  120.     //绘画位图  
  121.     switch (cbDrawMode)  
  122.     {  
  123.     case DRAW_MODE_SPREAD:      //平铺模式  
  124.         {  
  125.             //加载资源  
  126.             INT nImageWidth=BitImage.GetWidth();  
  127.             INT nImageHeight=BitImage.GetHeight();  
  128.   
  129.             //绘画位图  
  130.             for (INT nXPos=0;nXPos<rcClient.right;nXPos+=nImageWidth)  
  131.             {  
  132.                 for (INT nYPos=0;nYPos<rcClient.bottom;nYPos+=nImageHeight)  
  133.                 {  
  134.                     BitImage.BitBlt(DC,nXPos,nYPos);  
  135.                 }  
  136.             }  
  137.   
  138.             return;  
  139.         }  
  140.     case DRAW_MODE_CENTENT:     //居中模式  
  141.         {  
  142.             //变量定义  
  143.             INT nImageWidth=BitImage.GetWidth();  
  144.             INT nImageHeight=BitImage.GetHeight();  
  145.   
  146.             //位置计算  
  147.             INT nXPos=(rcClient.Width()-BitImage.GetWidth())/2;  
  148.             INT nYPos=(rcClient.Height()-BitImage.GetHeight())/2;  
  149.   
  150.             //绘画位图  
  151.             BitImage.BitBlt(DC,nXPos,nYPos);  
  152.   
  153.             return;  
  154.         }  
  155.     case DRAW_MODE_ELONGGATE:   //拉伸模式  
  156.         {  
  157.             //变量定义  
  158.             INT nImageWidth=BitImage.GetWidth();  
  159.             INT nImageHeight=BitImage.GetHeight();  
  160.   
  161.             //绘画位图  
  162.             BitImage.StretchBlt(DC,0,0,rcClient.Width(),rcClient.Height(),0,0,nImageWidth,nImageHeight);  
  163.   
  164.             return;  
  165.         }  
  166.     }  
  167.   
  168.     return;  
  169. }  
  170.   
  171. //绘画PNG图像  
  172. bool DrawImagePng( HDC DC, INT nXPos, INT nYPos )  
  173. {  
  174.     //加载判断  
  175.     assert(m_pImage!=NULL);  
  176.     if (m_pImage==NULL) return false;  
  177.   
  178.     //创建屏幕  
  179.     assert(DC!=NULL);  
  180.     Graphics graphics(DC);  
  181.   
  182.     //获取属性  
  183.     INT nImageWidth=m_pImage->GetWidth();  
  184.     INT nImageHeight=m_pImage->GetHeight();  
  185.   
  186.     //构造位置  
  187.     RectF rcDrawRect;  
  188.     rcDrawRect.X=(REAL)nXPos;  
  189.     rcDrawRect.Y=(REAL)nYPos;  
  190.     rcDrawRect.Width=(REAL)nImageWidth;  
  191.     rcDrawRect.Height=(REAL)nImageHeight;  
  192.   
  193.     //绘画图像  
  194.     graphics.DrawImage(m_pImage,rcDrawRect,0,0,(REAL)nImageWidth,(REAL)nImageHeight,UnitPixel);  
  195.   
  196.     return true;  
  197. }  
VC++ WIN32 sdk实现按钮自绘详解.   网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说.实例图片:  首先建立一个标准的Win32 Application 工程.选择a simple Win32 Application.然后建立我们的资源文件首先新建一个对话框资源,资源ID改为IDD_MAIN_DLG然后在其上新建一个按钮控件资源ID改为IDC_ODBUTTON, 阅读详情

相关推荐

CodeFarmer Tool for Win32 SDK C/C++ RAD介绍(非免费)

一、背景:Win32程序编制,功能、运行效率综合相对全面的框架还是MFC(不带偏见,不喜勿喷),但是MFC晦涩难懂,操作需要对Window消息驱动机制熟悉,需要对Window API或SDK很深入了解,才能上手、快速编制,尽管M$对VC++(Classic Version)其实已经做了很多幕后工作。它编制的程序,除了带点.Dll库尾巴(别打包,大),其实什么都比较好。RAD框架或工具,一旦上手入迷,便“上瘾”,难以自拔,什么都想Drag && Drop一下。

weixin_55465758的博客 1747

Win32绘制PNG

0. 简介 LoadPNG部分参考开源游戏引擎UE4中绘制Splash代码片段:Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsPlatformSplash.cpp中的LoadSplashBitmap()方法 使用AlphaBlend实现透明背景(MSDN示例) 1. 头文件 #include"wincodec.h" #...

NONElgh的博客 1312

基于C++与Win32 API的本地化图片打码工具开发实战

图像处理是计算机视觉与图形学领域的基础技术,其核心原理在于对像素数据进行操作与变换,以实现特定的视觉效果。在工程实践中,本地化、轻量级的图像处理工具因其对隐私保护、性能可控及零依赖的独特价值,在敏感信息脱敏、文档安全等场景中备受青睐。本文聚焦于利用C++与原生Win32 API配合GDI+,从零构建一个高性能的桌面打码软件。项目深入剖析了图形界面创建、消息循环机制、图像像素级操作(如马赛克与模糊算法)等关键技术细节,并针对**性能优化**与**用户体验**进行了工程化打磨,例如通过双缓冲技术解决界面闪烁、引

weixin_42537142的博客 281

使用WIN32 被API参数类型坑到的记录

最近在做项目,有个需求是测硬盘剩余空间,并进行预测的。 通常情况下是用GetDiskFreeSpaceEx这个API。 但是问题来了,在测试过程中,我模拟了一个硬盘大小是100MB,然后添加了一个200MB的文件,按照道理应该会提示空间不足。奇怪的事情发生了,这一步被跳过了… 思考了一会,我一度以为是我设计出了问题,排查着问题,突然我想起了以前看过了一个开源对size_t的处理方法以及作者对这段处...

qq_40212938的博客 377

基于逆波兰式的Win32SDK计算器项目

计算器程序将具备基本的数学运算功能,如加、减、乘、除,以及更高级的功能,比如括号处理、错误处理和科学计算等。我们会按照功能模块划分开,逐一实现。通过本章的学习,我们将掌握如何搭建开发环境、理解Win32 SDK的基础概念,并开始制定我们的计算器项目规划。接下来的章节会深入到具体的编程实践,从C++基础语法,到使用Windows API构建GUI,再到算法和数据结构的实现,最终实现一个功能完备的计算器应用程序。

weixin_33173126的博客 482

利用win32 SDK 显示bmp图像

利用win32的一些函数显示bmp图像,简单的demo

windows编程笔记【四】事件处理函数和主事件循环

本笔记源自windows游戏编程大师技巧第二版2.9章,记做学习随笔。 使用vs2017环境编译。  在此之前,我们写的Windows类,也就是: WNDCLASSEX winclass; 中,有一个类的成员变量,他要求填写一个回调函数。这个函数就是我们要写的事件处理函数,他在这里: #include &lt;Windows.h&gt; #include &lt;windowsx...

nullccc的博客 1940

win32 sdk用windows api开发exe

vc++ win32 api sdk使用示例

精通Win32 API编程-Windows图形界面编程

Windows的API(Application Programming Interface,应用程序编程接口),是Windows 操作系统提供给应用程序的大量函数,学习本课程,不仅可以掌握Windows界面编程,开发华丽的Windows桌面运用程序,也可以为MFC框架的学习奠定扎实的基础,同时是否熟练的掌握Windows API开发,也是企业考量优秀程序员一个非常重要的指标!

CMap与L1000技术解析:基因表达数据在药物发现中的应用

本文深入解析了CMap(连接图)与L1000技术在药物发现中的核心应用。CMap通过构建基因表达“关系网”,实现基于模式匹配的药物重定位;L1000技术则以低成本、高通量方式生成关键基因表达数据,支撑了LINCS超级数据库。文章以CLUE平台为例,手把手演示了如何利用疾病基因表达签名逆向筛选潜在治疗化合物,并拓展了其在解析药物机制、预测副作用等多场景下的价值。

weixin_29207533的博客 728

用Coze平台30分钟打造《花光10亿》小游戏:零代码AI开发实战

本文详细介绍了如何利用字节跳动推出的Coze平台,在30分钟内零代码开发一款名为《花光10亿》的AI小游戏。通过配置提示词、集成图像生成插件、构建自动化工作流以及使用数据库功能,即使没有编程基础的用户也能快速将创意转化为可交互的智能应用,体验AI开发的便捷与高效。

weixin_29313547的博客 206

在Win32API窗体下实现透明背景

前面拜读过本站无数高手的许多好文章,受益非浅,首先向各位大侠致敬!今天编程偶有小得,不敢独享,特拿出来与各位共享,希望对某些朋友有些许帮助。   透明窗体的问题相信大家已经很熟悉了,前面的几期在线杂志也有几篇详尽的教程,总结一下就是通过SetWindowRgn这个函数来实现,具体的裁切框用CRgn来生成,比较简单的 象圆,椭圆,圆角窗口等CRgn类都提供了相应的生成方法,我们如果想根据自己的图片

cixixyj的专栏 5285

Win10无外网热点搭建全指南:纯局域网通信与设备互联

热点并不是只有共享上网一种用途。在很多工程与办公场景中,我们需要的是让手机、笔记本、开发板等设备临时组成一个纯内网,完成文件传输、端口调试或局域网联机,而不需要任何外网出口。Win10笔记本在不连接互联网的状态下,借助系统移动热点或netsh承载网络,完全可以创建一个无外网热点,实现设备间二层互通。其核心在于利用SoftAP建立虚拟无线接入点,并绕开或禁用ICS的NAT转发。掌握这一技术,可在会议、出差、物联网调试等场景中快速搭建临时局域网,无需额外路由器。本文详细梳理三种实现路径、操作步骤及常见故障排查,

weixin_29230773的博客 238

Win32 SDK显示图像(GDI+)

转载自:http://www.cnblogs.com/nbsofer/archive/2012/05/12/2497109.html 刚学了GDI+, 发现显示图片很方便, 以前用OleLoadPicture+IPicture接口显示, 别提有多 悲剧了, 现在学了GDI+, 太方便友好了, 哈哈~    提供一个GDI+显示图片的示例供那些不知道怎么用Win32SDK显

Eternal 1173

企业微信审批流开发避坑指南:从零搭建自定义审批模板(含完整代码)

本文为企业微信审批流开发提供了从零搭建自定义审批模板的完整指南。通过对比内置模板与自建引擎的优劣,详细阐述了利用企业微信开放API和自建应用实现高度灵活审批流程的方案。文章重点解析了前端JS-SDK安全调用、后端签名生成与回调处理的核心代码,并分享了流程引擎设计、安全加固及性能监控等实战经验,帮助企业开发者避开常见陷阱,构建贴合业务的自定义审批系统。

weixin_28358083的博客 966

基于Cesium的简易淹没分析效果

淹没分析是通过模拟水体扩散过程来评估洪水、海平面上升等情景下可能影响的区域,其核心作用是为防灾减灾、规划设计和风险管理提供科学依据。预测淹没的范围、水深和持续时间,识别高风险区域,帮助政府制定应急预案和疏散路线,减少人员伤亡和财产损失。

星云数海的博客,一个专注GIS十多年的GISer人。 531

踩坑:VirtualBox:安装提示缺少python core和win32 api

内容提示:安装Oracle VM VirtualBox 7.0.24的Python绑定需要先安装Python Core包和win32api绑定。如果现在继续安装Oracle VM VirtualBox 7.0.24的Python绑定,那么这些依赖项需要在之后手动设置。用户可以参考Oracle VM VirtualBox 7.0.24 SDK手册获取更多信息。

头疼 7483

【Bug已解决】Failed to fetch version ECONNREFUSED 解决方案

方案适用场景推荐指数难度方案一:NODE_EXTRA_CA_CERTS代理/企业网关证书⭐⭐⭐⭐⭐低方案二:浏览器导出证书不知证书在哪⭐⭐⭐⭐中方案三:使用系统证书macOS 用户⭐⭐⭐⭐中方案四:关闭代理直连快速验证⭐⭐⭐低方案五:更新 Node.js证书列表过时⭐⭐⭐低方案六:同步系统时间时间偏差导致⭐⭐⭐低根本原因。

博客 9973

使命!!用C++和win32 API写面向对象的windows程序吧!!!~~

想必每一个学windows编程的人都学会了那经典的windows C程序吧,见下面:int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,                    PSTR szCmdLine, int iCmdShow)     {         RegisterClass;         Create

糯米糊糊的专栏 2429

西门子V90伺服——章节0、西门子V90章节总述

格式规范:西门子V90伺服——章节1、产品介绍(1、伺服系统初步介绍)@[TOC](西门子V90伺服——章节1、产品介绍)课时1伺服系统初步介绍(1)课时2 伺服系统初步介绍(2)课时3 运动控制基础(1)课时4 运动控制基础(2)课时5 产品概览课时6 相关选件课时7 控制模式介绍(1)课时8 控制模式介绍(2)课时9 产品选型课时10 调试工具及相关资料介绍。

大小曲奇的博客 123

MIKE21 MIKE软件 教程 0.1 软件介绍与教学目录

MIKE 21是一个专业的工程软件包,用于模拟河流、湖泊、河口、海湾、海岸及海洋的水流、波浪、泥沙及环境问题。在MIKE Zero集成平台中,主要有MIKE11,MIKE21,MIKE3三类软件,分别对应一维,二维,三维的水动力模型模拟。同时还包括MIKE HYDRO,MIKE FLOOD等其他功能,各软件的具体介绍请参考DHI公司的官方文档,在此不作赘述。学习过程中,对于任何操作界面的疑问,建议大家仔细阅读帮助文档(在有疑问的界面按F1调出),同时官方也提供了对应的线上和线下教学服务(免费+收费)。

Hello Word 2万+

win32显示gif图片

最近在写win32的发送图片程序,由于要求适配gif格式,不得不强迫自己写了这么一个程序,主要参考了VC++ win32 sdk 显示 gif 图片,不过里面的每一帧的显示时间时间设成了固定值,我在代码中写了一个函数获取gif的间隔时间进行了修改 我把函数写到了一个cpp和一个h文件中,大家使用的时候调用OpenGifThread函数就可了 ShowGif.h的内容 #include

南浦 2537

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WIN32API 图标拖拽功能的基本配置方法

基本的方法就是通过微软官网提供的事列来完成整个操作过程, 微软链接:https://docs.microsoft.com/en-us/windows/desktop/controls/using-image-lists; https://docs.microsoft.com/en-us/windows/desktop/controls/using-treeview 1.通过WIN32 ...

weixin_30517001的博客 302

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

清空mfc static pic_初学者必看:VC++、Win32 SDK、MFC的区别

这是一个初进行开发人员都可能遇到过的概念不清的问题,自己当年也同样有过误解,做技术我感觉一定要专,但是,不代表毫不关心相关的知识,至少概念层次上要知道,所以,这里还是再把这些内容纪录下来,好记性不如烂笔头:图1 SDK C/C++都是一种编程语言,程序员用它来创作(我喜欢用创作这个词,让写代码有一些艺术气息...)各种各样的程序,简单如计算闰年,复杂到一个系统地实现。当然,编写标准C程序的时候,...

weixin_39743369的博客 131

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

一个基于Win32SDK写的超简单画图板

#pragma comment(linker, "/subsystem:windows") #include // ---------------------------------------------------------------------------- static HDC g_hDC = NULL; static HDC g_memDC

冷却 1469

win32 窗口绘制直线

在win32 窗口 绘制直线 测试环境: win7 64 位 vs2013建立一个 win32 应用程序 ,空项目,名称是 HelloPaintLine, 在项目中添加源文件 HelloPaintLine.cpp : 内容如下:#include <windows.h> #include <stdlib.h>

abc 2104
上一篇: cocos2dx 常见的动作汇总
下一篇: 快速高效接入SDK——总体思路和架构
Sun___Shine
博客等级 码龄12年 61粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值