WinAPI保存文件对话框

// 保存字符串缓冲区
TCHAR szFileName[MAX_PATH] = { 0 };

// 定义结构体
OPENFILENAME OpenFileName = { 0 };
// 初始化结构体大小
OpenFileName.lStructSize = sizeof(OPENFILENAME);
// 设置父窗口句柄
OpenFileName.hwndOwner = hWnd;
// 设置字符串缓冲区
OpenFileName.lpstrFile = szFileName;
// 设置字符串缓冲区大小
OpenFileName.nMaxFile = sizeof(szFileName);
// 文件类型选择器
OpenFileName.lpstrFilter = _T("ClearSeve1 (*.cs1)\0*.cs1\0ClearSeve2 (*.cs2)\0*.cs2\0所有文件 (*.*)\0*.*\0\0");

if (GetSaveFileName(&OpenFileName) == TRUE)
{ // 保存文件夹
    MessageBox(hWnd, szFileName, _T("保存的文件"), MB_OK);
}

可替换字符串的转换

系统中开头% %结尾的字符串并不少, 这些对应一些系统路径, 以下代码可以转换路径具体的位置.

// 获取转换后的长度
DWORD dwStrLen = ExpandEnvironmentStrings(_T("%APPDATA%"), NULL, 0);
// 申请内存空间
PTSTR pszBuffer = new TCHAR[dwStrLen];
ZeroMemory(pszBuffer, dwStrLen*sizeof(TCHAR));
// 转换字符串
ExpandEnvironmentStrings(_T("%APPDATA%"), pszBuffer, dwStrLen);
// 释放内存
delete[] pszBuffer;

|环境变量|说明|位置|
|-|-|-|
|%SystemDrive%|系统安装的磁盘分区|C:|
|%SystemRoot% = %Windir%| WINDODWS 系统目录|C:Windows|
|%ProgramFiles%|应用程序默认安装目录|C:Program Files|
|%ProgramFiles(x86)%|应用程序默认安装目录(86)|C:Program Files (x86)|
|%ProgramW6432%|应用程序默认安装目录|C:Program Files|
|%AppData%|应用程序数据目录|C:UsersAdministratorAppDataRoaming|
|%LocalAppData%|应用程序共享数据目录|C:UsersAdministratorAppDataLocal|
|%CommonProgramFiles%|公用文件目录|C:Program FilesCommon Files|
|%HomePath%|当前活动用户目录|C:UsersAdministrator|
|%Temp% =%Tmp%|当前活动用户临时目录|C:UsersAdministratorAppDataLocalTemp|
|%HomeDrive%|当前用户系统所在分区|C:|
注: 以C盘为列

模拟点击窗口IDOK按钮

按下抬起鼠标

PostMessage(GetDlgItem(hMainWnd, IDOK), WM_LBUTTONDOWN, 0, 0);
PostMessage(GetDlgItem(hMainWnd, IDOK), WM_LBUTTONUP, 0, 0);

直接发送点击

SendMessage(hMainWnd, WM_COMMAND, IDOK, 0);

hMainWnd 是主窗口
关于窗口的查找请参考”WinAPI 窗口查询
按下抬起鼠标可以同步和异步,直接发送点击只能为异步.
更多点击模拟请查看”控件的事件模拟

GDIPlus图片的等比例缩放

加载头文件和库

#pragma comment(lib,"gdiplus.lib")
#include "gdiplus.h"
using namespace Gdiplus;

初始化gdi+对象

GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);

绘制图片

// 图片对象
Image m_Image(m_strImagePath);
// 保存转换后的宽高
double m_dWidth, m_dHeight;
// 设置基于大小
double setWidth = 245, setHeight = 130;
// 保存图片宽度,和长度
double imageWidth = m_Image.GetWidth();
double imageHeight = m_Image.GetHeight();