背景 因为自己协同工具用win32开发,自己想加载一个?图标,如果直接加载bitmap非常简单,直接添加资源,然后设置bitmap的资源id即可,但我想加载一个png,因为Png可以支持透明,而且显示png也是一个非常常见的需求 解决思路 google一下基本全部都是用gdi+ 渲染到子控件中 直接渲染的话,如果控件被遮挡是不会显示的,所以这个必须控件子类化,在wm_paint进行渲染png 代码 简单封装一个基类,方便渲染子类化 #include "pch.h" #include "…
背景 因为自己协同工具用win32开发,自己想加载一个?图标,如果直接加载bitmap非常简单,直接添加资源,然后设置bitmap的资源id即可,但我想加载一个png,因为Png可以支持透明,而且显示png也是一个非常常见的需求 解决思路 google一下基本全部都是用gdi+ 渲染到子控件中 直接渲染的话,如果控件被遮挡是不会显示的,所以这个必须控件子类化,在wm_paint进行渲染png 代码 简单封装一个基类,方便渲染子类化 #include "pch.h" #include "…
背景 最近给自己一个手机协作软件增加防火墙规则(一直准备发布出来,但感觉写不够完善就一直拖着),于是找了一些网上资料,我感觉资料真的比较少,后面找到微软demo代码,直接copy稍微改了给自己用。 资料 Exercising the Firewall using C++ (Windows) | Microsoft Learn 微软官方代码页,我感觉这个没有下面demo好 Windows-classic-samples/FirewallConfig.cpp at main · microsoft/Windows-cl…
背景 从底层角度来分析,借鉴reactos 系统(一款兼容window软件的系统 ),从代码找到他们里面的实现,我猜测是对话框无非是从配置创建对应的窗口。 验证 搜索创建对话框的代码 DialogBoxParamW,然后找到实现代码 /*********************************************************************** * DIALOG_CreateIndirect * Creates a dialog box window * * modal = TRUE…
背景 准备给自己SDL window窗口修改一下系统菜单,增加一个置顶窗口,方便自己看视频,于是研究一下win32怎么增加菜单 逻辑 GetSystemMenu 获取系统菜单句柄 AppendMenu 传入系统菜单句柄,增加自己菜单 demo RESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: { int wmId = LOWORD(w…
背景 记录一下win32编程,其实这种东西没有任何意义,只是回味一下win32编程,只是现在工具用的win32开发的,不想用第三方的界面库。 加载icon 方法一,这种无法设置icon的大小 HICON folderico = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)); ::SendMessage(btn_control_home, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)folderico); …