WIN32 (PC端)
UI制作自由度最高,但是工作量大,效率低,需要大量的封装类积累
大树学长
多年专业音响、乐器行业经验,PC端、MAC端、安卓端软件开发,精通上位机软件制作。
展开
-
WIN32开发之ini文件操作
1、写入ini文件CString strCount = "123456789";//写入参数TCHAR exeFullPath[MAX_PATH]; // Full path GetModuleFileName(NULL, exeFullPath, MAX_PATH); std::wstring strFullPath = (std::wstring)(exeFullPath); int nStart = strFullPath.find_last_of(TEXT("原创 2021-07-29 11:23:32 · 372 阅读 · 0 评论 -
WIN32开发之文件操作对话框
1、选择文件对话框OPENFILENAME ofn = { 0 }; TCHAR strFilename[MAX_PATH] = { 0 };//用于接收文件名 MAX_PATH=260 ofn.lStructSize = sizeof(OPENFILENAME);//结构体大小 ofn.hwndOwner = NULL;//拥有着窗口句柄,为NULL表示对话框是非模态的,实际应用中一般都要有这个句柄 ofn.lpstrFilter = TEXT("Flie\0*.txt;\0\0"); o原创 2021-05-21 14:52:06 · 1217 阅读 · 3 评论 -
WIN32开发之判断字符串像素宽度
使用GDI+的MeasureString函数来实现这个功能1、初始化GDI+#include <gdiplus.h> using namespace Gdiplus;#pragma comment(lib, "gdiplus") 2、判断长度等下面这个是判断字符串长度超过240像素后,先获取字符串在240以内部分,然后超出的部分加"..."显示Graphics gra(hdcBuffer); //首先创建字体相关 FontFamily fontFamily原创 2020-11-16 15:17:55 · 460 阅读 · 0 评论 -
Win32之exe设置只能运行一个
在主函数中添加int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){//第一种防止程序重复启动的方法 HANDLE hMutex; hMutex = CreateMutex(NULL, FALSE, TEXT("RunOnlyOneInstance")); if (hMutex == NULL || ERROR_ALREADY_EXISTS == ::Ge原创 2020-11-03 11:04:24 · 944 阅读 · 1 评论 -
VS2013之Windows平台兼容性问题
1、使用VS查看生成的exe文件所有dll依赖库打开文件然后根据VS中生成的exe是32位还是64位来打开命令提示工具然后使用命令进入exe运行的路径,再exe路径 + dumpbin /dependents exe名称.exe或者直接dumpbin /dependents exe路径如果名称有空格的需要带“”回车后就会显示exe需要的依赖库原则上建议将所有的库都和exe放在一起,以免在别的电脑上打开exe会提示什么乱七八糟的错误的问题,这些都是缺少库或者32原创 2020-07-17 09:32:05 · 1017 阅读 · 0 评论 -
【WIN32开发】两个结构体判断是否相等
这个主要用于在界面刷新的问题,结构体代表整个软件里面的参数,如果里面某一个参数改变了就刷新界面。使用InvalidateRect(MainFrameHwnd, NULL, FALSE); 发送WM_PAINT消息刷新界面//结构体1、结构体2、长度(sizeof(结构体1))uint8_t cmpBuff(uint8_t* buff1, uint8_t* buff2, uint32_t l...原创 2019-04-18 11:06:16 · 405 阅读 · 0 评论 -
【WIN32】随意记录
POINT pts[5] = { { 200, 0 }, { 0, 160 }, { 120, 400 }, { 285, 400 }, { 400, 160 } }; HRGN rgn = CreatePolygonRgn(pts...原创 2019-04-24 10:53:27 · 103 阅读 · 0 评论 -
【WIN32开发】GDI+基础
画线/边框(Pen)1、画单线-------DrawLinePenpen(Color(255,0,0,0),3);PointFL_PTStart(0,0);PointFL_PTEnd(100,10);graphics.DrawLine(&pen,L_PTStart,L_PTEnd);2、连接线--------DrawLines...转载 2019-04-24 16:40:43 · 273 阅读 · 0 评论 -
【WIN32开发】自定义MessageBox按钮名称
有时候中英文确定取消的都不好使,这个时候就要用到自定义按钮名称了先声明添加:extern HHOOK hHook;//自定义按钮名称extern LRESULT __stdcall CBTHookProc(long nCode, WPARAM wParam, LPARAM lParam);HHOOK hHook;LRESULT __stdcall C...原创 2019-05-21 11:14:50 · 2538 阅读 · 0 评论 -
WIN32开发之Unicode字符集下cstring转换为char[]相互转换
1、CString转char[]CStringSeveName;//char ch[100];memcpy(a, SeveName, SeveName.GetLength() * 2); for (int i = 0; i < SeveName.GetLength(); i++) { a[i] = a[i * 2];...原创 2019-07-12 18:33:53 · 178 阅读 · 0 评论 -
【WIN32开发】获取键盘消息:注册全局热键
获取WM_KEYDOWN消息需要相应的获取焦点问题,只有正确的焦点位置才能操作,这个方法存在一定的体验问题,现在使用热键在任何情况下都可以获取你想要的键盘消息。缺点是别的程序将无法再获取到这个键盘消息,所以一般推荐使用组合键热键,单键热键不推荐BOOL RegisterHotKey(HWND hWnd, //响应该热键的窗口句柄,如果为空,则注册到调用线程上I...转载 2019-04-22 14:49:28 · 1789 阅读 · 0 评论 -
【WIN32开发错误集】
1、UINT和int区别一个为无符号整,一个有正负。uint在一些需要负数的情况下会出错。(比如:MOVE获取坐标)2、串口数据接收while循环中加一个sleep(1),可以降低消耗...原创 2019-03-01 16:13:50 · 258 阅读 · 0 评论 -
WIN32开发之程序基础结构
一、概述Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。程序中只要按一定的格式填写系统留给客户的那一小部分。所需要完成的有:窗口类的定义、窗口的建立、消息函数的书写、消息循环。 二、消息处理函数Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。没个窗口都有一个消息处理函数。在消息处理函数中,对传入的消息进行处理。系统内还有...转载 2018-05-08 11:28:18 · 292 阅读 · 0 评论 -
WIN32开发之小知识点
1、toupper()函数toupper是一个库函数toupper的头文件:#include <ctype.h>函数的原型:int toupper(int c);函数说明:若参数 c 为小写字母则将该对应的大写字母返回。返回值:返回转换后的大写字母,若不须转换则将参数c 值返回。toupper的头文件:#include <ctype.h>函数的原型:int...原创 2018-05-08 17:59:00 · 461 阅读 · 2 评论 -
32位数据转8位数据和8位数据转32位数据
1。32位数据转换为8位数据UINT32 m_num32[512];//32里面有参数UINT8 m_num8[2048];UINT8 m_temp;memset(m_num8, 0, 2048);for(int i = 0; i < 512; i++){m_temp = m_num32[i] >> 24;m_num8[i] = m_temp;m_temp = m_num32[i...原创 2018-05-16 10:03:17 · 8154 阅读 · 1 评论 -
run -time check failure#2-stack around the variable 'numm' was corrupted错误
直接翻译:在变量“NUMM”周围运行时检查失败的“2”堆栈被破坏了。大意就是numm内存被改了。解决办法,改变numm的类型,或者改变计算方式原创 2018-05-30 16:04:54 · 1067 阅读 · 0 评论 -
MessageBox中MB_OK或者MB_YESNO使用英语或者其它语言显示
有时候需要使用为英文提示,不能有中文字符MessageBox(MainFrameHwnd, TEXT("123"), TEXT("456"), MB_ICONWARNING | MB_YESNO);MessageBoxEx和MessageBox使用相同MessageBoxEx(MainFrameHwnd, TEXT("123"), TEXT("456"), MB_ICONW...原创 2018-07-09 14:30:57 · 5466 阅读 · 0 评论 -
文字对齐属性
TA_BOTTOM :下对齐TA_TOP:上对齐TA_LEFT:左对齐TA_RIGHT:右对齐TA_CENTER(VTA_CENTER):居中对齐TA_RTLREADING:从右到左顺序显示原创 2018-06-27 17:11:09 · 364 阅读 · 0 评论 -
Win32 常用API函数
1.获取客户区矩形区域RECT cliRect;GetClientRect(hWnd, &cliRect);2.获取窗口上下文句柄HDC hdc = GetDC(hWnd);//....ReleaseDC(hWnd, hdc); 3.LPWSTR 与 char * 互转int32_t WToChar(LPWSTR szWstr, char szCstr[], const int32...转载 2018-07-03 16:37:54 · 1907 阅读 · 0 评论 -
【WIN32中使用GDI+入门】
方法和我前面写过的VS2013使用GDI+一样下载GDI+配置文件:https://download.csdn.net/download/bigtree_mfc/107385831、将下载好的文件放在项目文件中2、配置项目->属性->配置属性->连接器->输入->附加依赖库中添加:gdiplus.lib3、添加头文件,放在主函数头文件中,这个位...原创 2018-10-23 13:56:10 · 483 阅读 · 0 评论 -
【WIN32开发,GDI+旋转图片】
int angle = 0;//角度graphics.RotateTransform(angle, MatrixOrderAppend);graphics.TranslateTransform(0, 0, MatrixOrderAppend);//graphics.DrawImage(&image, 0, 0, width, height);//graphics.ResetTra...原创 2018-10-23 16:03:36 · 670 阅读 · 0 评论 -
WIN32开发之LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。没个窗口都有一个消息处理函数。在消息处理函数中,对传入的消息进行处理。系统内还有它自己的缺省消息处理函数。 客户写一个消息处理函数,在窗口建立前,将消息处理函数与窗口关联。这样,每当有消息产生时,就会去调用这个消息处理函数。通常情况下,客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺...转载 2018-05-08 11:22:32 · 1750 阅读 · 0 评论