windows程序设计「BITMASK.C」范例分析笔记

告别密码!用VScode+SSH一键连接树莓派,再也不用每次输密码了 本文详细介绍了如何通过VScode和SSH密钥实现树莓派的免密连接,告别繁琐的密码输入。从开发环境准备、SSH密钥生成与配置,到VScode远程连接优化和常见问题排查,提供了一套完整的解决方案,帮助开发者提升工作效率。 阅读详情

/*-------------------------------------------

   BITMASK.C -- Bitmap Masking Demonstration

                (c) Charles Petzold, 1998

  -------------------------------------------*/

 

#include <windows.h>

 

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

 

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

                    PSTR szCmdLine, int iCmdShow)

{

     static TCHAR szAppName [] = TEXT ("BitMask") ;

     HWND         hwnd ;

     MSG          msg ;

     WNDCLASS     wndclass ;

 

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;

     wndclass.lpfnWndProc   = WndProc ;

     wndclass.cbClsExtra    = 0 ;

     wndclass.cbWndExtra    = 0 ;

     wndclass.hInstance     = hInstance ;

     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;

     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;

     wndclass.hbrBackground = (HBRUSH) GetStockObject (LTGRAY_BRUSH) ;

     wndclass.lpszMenuName  = NULL ;

     wndclass.lpszClassName = szAppName ;

    

     if (!RegisterClass (&wndclass))

     {

          MessageBox (NULL, TEXT ("This program requires Windows NT!"),

                      szAppName, MB_ICONERROR) ;

          return 0 ;

     }

    

     hwnd = CreateWindow (szAppName, TEXT ("Bitmap Masking Demo"),

                          WS_OVERLAPPEDWINDOW,

                          CW_USEDEFAULT, CW_USEDEFAULT,

                          CW_USEDEFAULT, CW_USEDEFAULT,

                          NULL, NULL, hInstance, NULL) ;

 

     ShowWindow (hwnd, iCmdShow) ;

     UpdateWindow (hwnd) ;

 

     while (GetMessage (&msg, NULL, 0, 0))

     {

          TranslateMessage (&msg) ;

          DispatchMessage (&msg) ;

     }

     return msg.wParam ;

}

 

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

     static HBITMAP   hBitmapImag, hBitmapMask ;

     static HINSTANCE hInstance ;

     static int       cxClient, cyClient, cxBitmap, cyBitmap ;

     BITMAP           bitmap ;

     HDC              hdc, hdcMemImag, hdcMemMask ;

     int              x, y ;

     PAINTSTRUCT      ps ;

    

     switch (message)

     {

     case WM_CREATE:

          hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;

 

                     // 载入位图资源,获取位图信息

          hBitmapImag = LoadBitmap (hInstance, TEXT ("Matthew")) ;

          GetObject (hBitmapImag, sizeof (BITMAP), &bitmap) ;

          cxBitmap = bitmap.bmWidth ;

          cyBitmap = bitmap.bmHeight ;

 

                     // 创建兼容内存环境,并载入位图

          hdcMemImag  = CreateCompatibleDC (NULL) ;

          SelectObject (hdcMemImag, hBitmapImag) ;

 

                     // 创建与资源位图同样大小的单色蒙板位图,并载入另一个兼容内存环境中

          hBitmapMask = CreateBitmap (cxBitmap, cyBitmap, 1, 1, NULL) ;

          hdcMemMask = CreateCompatibleDC (NULL) ;

          SelectObject (hdcMemMask, hBitmapMask) ;

         

                     // 为蒙板内存环境载入黑色画刷,并用该画刷填充整个区域

          SelectObject (hdcMemMask, GetStockObject (BLACK_BRUSH)) ;

          Rectangle (hdcMemMask, 0, 0, cxBitmap, cyBitmap) ;

 

                     // 画一个白色的椭圆形,在蒙板内存环境中间

          SelectObject (hdcMemMask, GetStockObject (WHITE_BRUSH)) ;

          Ellipse (hdcMemMask, 0, 0, cxBitmap, cyBitmap) ;

 

               // Mask the original image

 

                     // 使用AND(与)操作符来将蒙板传送到原始位图上

                     // 由于蒙板位图是单色的,所以白色为1,黑色为0。通过AND操作,删除了源位图中椭圆以外的图素

          BitBlt (hdcMemImag, 0, 0, cxBitmap, cyBitmap,

                  hdcMemMask, 0, 0, SRCAND) ;

 

                     // 删除内存环境,得到了黑色包围的椭圆区域位图hdcMemImag

          DeleteDC (hdcMemImag) ;

          DeleteDC (hdcMemMask) ;

          return 0 ;

 

     case WM_SIZE:

          cxClient = LOWORD (lParam) ;

          cyClient = HIWORD (lParam) ;

          return 0 ;

 

     case WM_PAINT:

          hdc = BeginPaint (hwnd, &ps) ;

 

          // 用于传送最终位图的内存环境

          hdcMemImag = CreateCompatibleDC (hdc) ;

          SelectObject (hdcMemImag, hBitmapImag) ;

 

                     // 用于设置背景色的内存环境

          hdcMemMask = CreateCompatibleDC (hdc) ;

          SelectObject (hdcMemMask, hBitmapMask) ;

 

          // 窗口大小 减去 位图大小 除以2 得到除开位图的平均中心区域,用于中心显示位图

          x = (cxClient - cxBitmap) / 2 ;

          y = (cyClient - cyBitmap) / 2 ;

 

                     // 0x220326 所执行的操作为 D & !S (先将蒙板图素取反,再与程序窗体色进行位AND运算后合并)

                     // 该操作先将原来黑色包围白色椭圆的位图,变为白色包围黑色椭圆的位图

                     // 最后通过AND合并,黑色为0。所以得到一个程序窗口中心为黑色椭圆的窗口画面

          BitBlt (hdc, x, y, cxBitmap, cyBitmap, hdcMemMask, 0, 0, 0x220326) ;

                     // SRCPAINT 在来源和目的之间进行位OR操作

                     // 由于该位图在椭圆以外为黑色0,OR保持了程序窗口原始色彩不变

                     // 最终将这个修改过的椭圆位图,显示到了窗口中心区域

          BitBlt (hdc, x, y, cxBitmap, cyBitmap, hdcMemImag, 0, 0, SRCPAINT) ;

 

          DeleteDC (hdcMemImag) ;

          DeleteDC (hdcMemMask) ;

          EndPaint (hwnd, &ps) ;

          return 0 ;

 

     case WM_DESTROY:

          DeleteObject (hBitmapImag) ;

          DeleteObject (hBitmapMask) ;

          PostQuitMessage (0) ;

          return 0 ;

     }

     return DefWindowProc (hwnd, message, wParam, lParam) ;

}

探索Vortex开源GPGPU:RISC-V SIMT架构(4-1),Execute SFU(1) 本文详细分析了Vortex RISC-V内核6级流水线中Execute阶段的SFU(特殊功能单元)模块。重点介绍了SFU的数据流结构,包含dispatch_unit、pe_switch、csr_unit、wctl_unit和gather_unit五个子模块。文章深入解析了warp控制指令wspawn和tmc的实现机制:wspawn用于激活指定数量的warp并设置新PC值,tmc则用于控制线程掩码和warp状态。通过C代码和汇编指令的对照分析,阐明了这些指令在并行计算中的关键作用,包括线程激活、状态切换和执行 阅读详情

相关推荐

薄膜电容寿命预测全解析:从理论到实践,5步搞定可靠性评估

本文全面解析薄膜电容寿命预测的理论与实践,提供五步可靠性评估流程,涵盖温度应力、电压应力等关键因素分析,并分享提升寿命的实用技巧。特别适用于新能源、电动汽车等领域的设计工程师,帮助准确预测薄膜电容在实际工况下的使用寿命。

weixin_33712987的博客 431

《Windows程序设计》之BITMASK

对位图中的掩码图,或图片合成还需要做进一步的了解,继续熟悉了内存中图片处理的相应过程。 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { static HBITMAP hBitmapImag,hBitmapMask; static HINSTANCE hInstance; s

倒计时 917

Xilinx Aurora 8B/10B IP核详解和仿真

Xilinx Aurora 8b/10b IP核的详解,以及使用与仿真示例,对IP核的配置和如何仿真有非常详细的说明,除了对IP核官方文档的内容进行了解析以外,还对GTX引脚的选择等比较容易混淆和不好理解的地方进行了说明。最后对IP核的仿真运行进行了STEP BY STEP 的说明,对仿真的结果也进行了简要的说明。 该文档对Xilinx FPGA和ZYNQ SOC下 AURORA 8B/10B IP核的使用提供了一个快速上手的指导。

weixin_43354598的博客 1万+

使用BitMask写出高效的程序

为什么要使用 BitMask在前一篇文章:Android 中的 Enum 到底占多少内存?该如何用? 中提到内存占用的问题。对于 Java 类应用,内存方面需要注意: 不要占用大量内存,否则可用内存少;触发 GC 或 OutOfMemoryError; 不要频繁创建对象,频繁内存分配,触发 GC。 对于枚举和常量: 使用枚举,并不会使得对象的创建更加频繁。 枚举类会比常量占用更多的内存,在程序运行...

唐小引(Echo)的 优快云 博客。 1193

【过检测】2026调试级去虚拟化虚拟机成品

EternalBlaze调试级虚拟机是由恒烈开发的定制化VMware环境,适用于逆向工程、病毒分析等专业场景。该虚拟机基于Windows 10 1909专业版,预装Python/JDK等开发环境和逆向工具包,支持快照回溯功能。特色包括:一键去虚拟化方案、双机调试支持、驱动开发环境等。适用场景涵盖CTF竞赛、软件调试、病毒行为分析等,但不支持DX12游戏和视频盗录。使用前需按步骤关闭安全中心、安装特定VMware版本并执行去虚拟化操作。虚拟机提供基础版和逆向调试增强版两种配置,均预装必要工具链。(149字)

Heng_lie的博客 2663

[系统安全] 十六.PE文件逆向基础知识(PE解析和PE编辑工具)

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~ 作者前面介绍了三个漏洞,包括Chrome浏览器保留密码渗透解析、通过Chrome浏

杨秀璋的专栏 1万+

BitMask分析

//头文件 #include #include "resource.h" //预处理 #ifdef UNICODE #define CF_TCHAR CF_UNICODETEXT #else #define CF_TCHAR CF_TEXT #endif //全局变量 HINSTANCE hInst; TCHAR szAppName[] = TEXT("Bi

geziv20的博客 1046

杰理SDK入门教程(一):SDK的四种编译方式的使用

杰理SDK提供了四种主要编译方式:1) JL Studio官方IDE,适合初学者;2) VS Code轻量级编辑器,需在SDK根目录打开;3) 命令行/脚本编译,灵活支持自动化;4) Code::Blocks开源IDE。每种方式都有详细操作指南,开发者可根据需求选择,初学者推荐从JL Studio开始熟悉编译流程。环境配置注意事项和编译成功标识均有明确说明,确保开发效率。

qq_42014563的博客 1146

Windows程序设计 读书笔记 - 位图和BitBlt。

一、位图 -- 光栅图像 -- 缩放会失真   元文件 -- 矢量图像 -- 缩放不失真 二、一些函数:   1、BitBlt (bit blit)   直接拷贝位图象素。   2、BOOL CDC::StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc,...

dizi9750的博客 293

CCP消息格式

CCP消息格式 CCP协议的实现只依赖于两则CAN消息CRO(Command Receive Object)和DTO(Data Transmission Object),CCP消息统一采用8字节数据场,所有命令参数以及数据都被打包在8字节的数据场中。 1、CRO(命令接收对象) CRO是主设备向从设备发送的消息对象,包括命令代码及命令参数,结构如下: CCP一共28条命令,所以命令代码有28个。...

wsq119的博客 1206

基于Claude Code的 规范驱动开发(SDD)指南

传统的AI辅助开发,如同手工作坊,我们向AI描述想法,它给我们零散的部件,我们再手动打磨、组装。这个过程充满了不确定性、信息损耗和重复劳动。本指南将尝试引领您进入软件开发的“工业时代”。在这里,

形上得其象,形下合于数;阴阳自济,玄理自明。 2747

嵌入式Linux+C语言进阶:从系统编程到驱动开发的硬核实战指南

在嵌入式系统开发领域,Linux操作系统与C语言构成了核心的技术基石。其原理在于,C语言凭借其直接操作硬件和内存的能力,为系统级编程提供了高效且可控的底层接口;而Linux内核则提供了强大的进程管理、内存管理、文件系统和设备驱动框架。这一组合的技术价值在于能够构建出稳定、高效且资源可控的嵌入式产品,广泛应用于智能硬件、工业控制、汽车电子等对实时性和可靠性要求极高的场景。要掌握这项硬核技能,开发者必须跨越从应用层到底层驱动的鸿沟,深入理解交叉编译、内核移植、驱动开发及多线程编程等关键技术。本指南聚焦于嵌入式L

weixin_33847182的博客 318

(二)使用VS2022克隆下载C++自制植物大战僵尸游戏教程

本文将介绍如何使用VS2022克隆下载《植物大战僵尸C++自制版本》。Gitee项目地址:Gitee仓库地址Github项目地址:Github仓库地址游戏官网地址(下载可直接运行)游戏官网。

尔灵尔亿的博客 4929

《Windows程序设计》之SCRAMBLE

/////////////////////////////////////////////////////////////////////// //这应该是写的第一个没有窗口过程的程序 /////////////////////////////////////////////////////////////////////// int WINAPI WinMain(HINSTANCE hInst

倒计时 1331

数学建模模型总结

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

GDI 映像方式 之 SetViewportOrgEx 与 SetWindowOrgEx 解析

SetViewportOrgEx 与 SetWindowOrgEx 解析

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 4014

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

windows程序设计 「PopPad3」范例分析笔记

Open、Save、Find和Font通用对话框的使用。OPENFILENAME(Open) 、FINDREPLACE(Find & Replace) 、CHOOSEFONT(Font)结构简洁。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 3519

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

windows程序设计 之 「KeyView1」范例算法分析 笔记

按键消息与字符消息的读取

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2567

SDK 实作VS2010复制中文乱码修复

当复制VS2010中带有中文字符的代码到Office(Word, Excel, PowerPoint, Outlook)时,在中文字符后面会被添加一到三个乱码。比如复制"中文字符",粘贴到word就会变成(中D文?字Á?符¤?)。本文通过同时截取CF_UNICODETEXT和RTF两种剪贴板数据,以CF_UNICODETEXT中的正确数据为参照,对比剔除RTF中的乱码。程序添加了全局热键 CTRL+Q 和 监测状态。右下角则是一个动态文字Logo,鼠标移上去就会出现Logo,移开则改为快捷键说明

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2121

windows 程序设计之「SINEWAVE.C」范例分析笔记

实作正弦波wave波形音频并播放。wave函数的调用方法:waveOutOpen ;waveOutPrepareHeader ;waveOutWrite ;waveOutReset ;waveOutClose ;waveOutUnprepareHeader 。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2067

windows程序设计 「PopPad3」之 POPPRNT.C 打印范例分析 笔记

PrintDlg 打印对话框, PRINTDLG 结构简介, 放弃打印程序 与 放弃打印对话框 的运用. 副本逐份打印( PD_COLLATE 旗标) 算法.

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 2050

windows程序设计之 「DevCaps2.C」范例分析 笔记

显示器设备 和 打印机设备 性能读取,打印机连接扫描,动态更改窗口菜单。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1951

windows程序设计「BLOWUP.C」范例分析笔记

锁定与解锁桌面窗口,绘制锁定后桌面窗口的旗标。利用位块传送函数,截取桌面窗口图形到程序窗口。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1861

windows 程序设计之「NetTime.C」范例分析笔记

使用Winsock获取网络时间,并更新本地时间。Winsock部分函数的使用:WSAStartup ;socket ;WSAGetLastError ;WSACleanup ;WSAAsyncSelect ;closesocket ;connect ;recv ;字符串分隔函数strtok的使用;系统时间的换算和更新。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1838

windows 程序设计之「TESTMCI.C」范例分析笔记

交谈式输入MCI命令,基于对话框的程序设计,文本编辑控件的部分特性使用方法。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1677

windows程序设计 之 「HEAD」范例分析笔记

清单方块控件 范例分析笔记

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1609

windows 程序设计之「RECORD2.C」范例分析笔记

使用MCI函数的消息和数据结构命令形式实作录音机并播放。结构 MCI_GENERIC_PARMS mciGeneric ; MCI_OPEN_PARMS mciOpen ; MCI_PLAY_PARMS mciPlay ; MCI_RECORD_PARMS mciRecord ; MCI_SAVE_PARMS mciSave 简介。函数 mciSendCommand 的各种参数使用方法。

孤云出岫, 去留一无所系. 朗镜悬空,静躁两不相干. 1600
上一篇: windows程序设计「BLOWUP.C」范例分析笔记
下一篇: windows程序设计「DIBHEADS.C」范例分析笔记
TypeCool
博客等级 码龄22年 58粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值