GuiMain.cpp 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #include "GuiThumbnail.h"
  2. #include "GuiMain.h"
  3. #include <wchar.h>
  4. #include <regex>
  5. #include "xcgui.h"
  6. // 全局变量
  7. char ConfigFile[MAX_PATH] = {0};
  8. WCHAR keyFile[MAX_PATH] = L"";
  9. WCHAR savePath[MAX_PATH] = L"D:\\Thumbs缩略图";
  10. // 全局句柄
  11. HWINDOW hWindow;
  12. HELE keyEdit, pathEdit , hList , hStatic;
  13. HELE hPic1, hPic2, hPic3;
  14. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
  15. {
  16. Everything_Start();
  17. XInitXCGUI(); // 初始化
  18. extern char ConfigFile[MAX_PATH];
  19. GetAppDir(ConfigFile);
  20. strcat(ConfigFile, "/ACThumbs.ini");
  21. if (IsFileExist(ConfigFile))
  22. LoadConfigFile();
  23. hWindow = XWnd_CreateWindow(0, 0, 950, 600, L"Adobe AI EPS INDD 和CorelDRAW 缩略图收集工具 版权所有 2016.3 Hongwenjun (蘭公子)"); // 创建窗口
  24. if (hWindow) {
  25. // 设置图标
  26. HICON logo_hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_ICON1);
  27. XWnd_SetIcon(hWindow, logo_hIcon, false);
  28. InitXC_Window(hWindow); // 窗口布局
  29. XWnd_ShowWindow(hWindow, SW_SHOW); //显示窗口
  30. XRunXCGUI(); //运行
  31. }
  32. return 0;
  33. }
  34. // 读取和保存配置
  35. void LoadConfigFile()
  36. {
  37. wfstream wFile(ConfigFile , fstream::in);
  38. wFile.imbue(locale("chs"));
  39. wFile.getline(keyFile, MAX_PATH);
  40. wFile.getline(savePath, MAX_PATH);
  41. wFile.close();
  42. }
  43. void SaveConfigFile()
  44. {
  45. wfstream wFile(ConfigFile , fstream::out);
  46. wFile.imbue(locale("chs"));
  47. wFile << keyFile << endl << savePath << endl;
  48. wFile.close();
  49. }
  50. // 文本框回写配置
  51. bool edit_text(void)
  52. {
  53. XEdit_GetText(keyEdit, keyFile, MAX_PATH);
  54. XEdit_GetText(pathEdit, savePath, MAX_PATH);
  55. return true;
  56. }
  57. // 窗口布局
  58. void InitXC_Window(HWINDOW& hWindow)
  59. {
  60. // XWnd_SetImage(hWindow, XImage_LoadFile(L"GuiBG.dll")); // 设置窗口背景图片
  61. // 创建编辑框
  62. keyEdit = XEdit_Create(1, 2, 302, 22, hWindow);
  63. pathEdit = XEdit_Create(412, 2, 270, 22, hWindow);
  64. // 读取配置到文本框
  65. XEdit_SetText(keyEdit, keyFile);
  66. XEdit_SetText(pathEdit, savePath);
  67. // 工具提示按钮
  68. HELE keyButton = XBtn_Create(306, 2, 98, 22, L"关键字 --> 搜索", hWindow);
  69. XEle_EnableToolTips(keyButton, true);
  70. XEle_SetToolTips(keyButton, L"请输入关键字,用空格隔开");
  71. HELE pathButton = XBtn_Create(685, 2, 98, 22, L"缩略图保存目录", hWindow);
  72. XEle_EnableToolTips(pathButton, true);
  73. XEle_SetToolTips(pathButton, L"选择缩略图保存的目录");
  74. HELE runButton = XBtn_Create(685, 30, 88, 32, L"开始执行", hWindow);
  75. XEle_EnableToolTips(runButton, true);
  76. XEle_SetToolTips(runButton, L"开始执行提取缩略图");
  77. HELE closeButton = XBtn_Create(685, 70, 88, 32, L"保存关闭", hWindow);
  78. // // 注册文本框输入事件
  79. // XEle_RegisterEvent(keyEdit, XE_EDIT_CHANGE, keyEditChange);
  80. // 注册按钮事件
  81. XEle_RegisterEvent(keyButton, XE_BNCLICK, keyBtnClick);
  82. XEle_RegisterEvent(pathButton, XE_BNCLICK, pathBtnClick);
  83. XEle_RegisterEvent(runButton, XE_BNCLICK, runBtnClick);
  84. XEle_RegisterEvent(closeButton, XE_BNCLICK, closeBtnClick);
  85. //创建列表元素
  86. hList = XList_Create(1, 25, 650, 518, hWindow);
  87. //添加列表头
  88. XList_AddColumn(hList, 260, L"名称", 2);
  89. XList_AddColumn(hList, 260, L"路径", 2);
  90. XList_AddColumn(hList, 100, L"文件版本", 2);
  91. // 创建静态文本
  92. hStatic = XStatic_Create(1, 545, 650, 22, L"Adobe AI EPS INDD 和CorelDRAW 缩略图收集工具 版权所有 2013.06 Hongwenjun (蘭公子)", hWindow);
  93. //创建图片元素
  94. hPic1 = XPic_Create(656, 200, 270, 256, hWindow);
  95. XPic_SetImage(hPic1, XImage_LoadFile(L"ACThumbs.png")); //设置显示图片
  96. hPic2 = XPic_Create(798, 6, 128, 128, hWindow);
  97. XPic_SetImage(hPic2, XImage_LoadFile(L"Thumbnail.dat")); //设置显示图片
  98. // hPic3 = XPic_Create(654, 416, 128, 128, hWindow);
  99. // XPic_SetImage(hPic3, XImage_LoadFile(L"Thumbnail.dat")); //设置显示图片
  100. //注册列表元素项选择事件
  101. XEle_RegisterEvent(hList, XE_LIST_SELECT, MyEventListSelect);
  102. XEle_RegisterMessage(hList, XM_MOUSEDBCLICK, MyEventList_MouseDBClick);
  103. XEle_RegisterMessage(hList, XM_RBUTTONUP, MyEventList_RButtonUp);
  104. XEle_SetFocus(keyEdit, true);
  105. }
  106. // 事件响应
  107. //bool CALLBACK keyEditChange(HELE hEle, HELE hEventEle)
  108. //{
  109. // return true;
  110. //}
  111. bool CALLBACK keyBtnClick(HELE hEle, HELE hEventEle)
  112. {
  113. wchar_t keyWord[MAX_PATH] = {0};
  114. XEdit_GetText(keyEdit, keyWord, MAX_PATH);
  115. Everything_SetSearch(keyWord);
  116. bool EQRet = Everything_Query(TRUE);
  117. if (EQRet == false) {
  118. return false;
  119. }
  120. // 删除所有项目
  121. XList_DeleteAllItems(hList);
  122. const wchar_t* rs = L"(.+)(\\.(?:ai|AI|indd|INDD|Indd|eps|EPS|Eps|cdr|CDR|Cdr))"; // 正则字符串,exp开始的单词
  123. std::wregex expression(rs); // 字符串传递给构造函数,建立正则表达式
  124. //添加列表项 // Display results.
  125. int id = 0;
  126. for (int i = 0 ; i < Everything_GetNumResults(); i++) {
  127. bool ret = std::regex_match((wchar_t*)Everything_GetResultFileName(i), expression);
  128. if (!ret) continue;
  129. //添加项
  130. XList_AddItem(hList, (wchar_t*)Everything_GetResultFileName(i), 0);
  131. //设置子项内容
  132. XList_SetItemText(hList, id++, 1, (wchar_t*)Everything_GetResultPath(i), 1);
  133. // XList_SetItemText(hList, i, 2, keyWord, 2);
  134. }
  135. wchar_t pText[MAX_PATH] = {0};
  136. wsprintfW(pText, L"匹配: %d 个文档(AI CDR EPS INDD格式), 鼠标双击: 打开文件,右键: 打开路径", id);
  137. XStatic_SetText(hStatic, pText);
  138. XWnd_RedrawWnd(hWindow, true);
  139. return true;
  140. }
  141. bool CALLBACK pathBtnClick(HELE hEle, HELE hEventEle)
  142. {
  143. char buf[MAX_PATH];
  144. if (GetPath(NULL , buf))
  145. charToWCHAR(savePath, buf);
  146. XEdit_SetText(pathEdit, savePath);
  147. return true;
  148. }
  149. bool CALLBACK runBtnClick(HELE hEle, HELE hEventEle)
  150. {
  151. // 从文本框获得参数
  152. edit_text();
  153. // // 执行提取缩略图 主功能
  154. bool ret = GuiThumbnail(keyFile , savePath);
  155. if (ret == false)
  156. return ret;
  157. // 打开文件夹
  158. ShellExecuteW(NULL, L"open", savePath, NULL, NULL, SW_SHOW);
  159. return ret;
  160. }
  161. bool CALLBACK closeBtnClick(HELE hEle, HELE hEventEle)
  162. {
  163. // 文本框回写配置
  164. edit_text();
  165. SaveConfigFile();
  166. ExitProcess(0); // 退出程序
  167. return true;
  168. }
  169. // 选择的文件全名 和路径
  170. wstring select_filename , select_filepath;
  171. BOOL CALLBACK MyEventListSelect(HELE hEle, HELE hEventEle, int id)
  172. {
  173. if (id < 0)
  174. return false;
  175. //hEle:列表元素句柄 //id:当前选择项索引
  176. select_filename = wstring(XList_GetItemText(hEle, id, 1)) + L"\\" + XList_GetItemText(hEle, id, 0);
  177. select_filepath = wstring(XList_GetItemText(hEle, id, 1));
  178. XPic_SetImage(hPic1, XImage_LoadFile(L"")); //设置图片为空,释放图片文件
  179. wchar_t tmppng[MAX_PATH] = L"Thumbnail.png";
  180. Thumbnail_TempPng(select_filename.c_str(),tmppng); // 生成新的临时预览图
  181. XPic_SetImage(hPic1, XImage_LoadFile(tmppng ,true)); //设置显示图片
  182. XWnd_RedrawWnd(hWindow, true);
  183. return true;
  184. }
  185. BOOL CALLBACK MyEventList_RButtonUp(HELE hEle, UINT flags, POINT* pPt)
  186. {
  187. ShellExecuteW(NULL, L"open", select_filepath.c_str(), NULL, NULL, SW_SHOW);
  188. return false;
  189. }
  190. BOOL CALLBACK MyEventList_MouseDBClick(HELE hEle, POINT* pPt)
  191. {
  192. ShellExecuteW(NULL, L"open", select_filename.c_str(), NULL, NULL, SW_SHOW);
  193. return false;
  194. }
  195. // 选择一个目录
  196. int GetPath(HWND hWnd, char* pBuffer)
  197. {
  198. BROWSEINFO bf;
  199. LPITEMIDLIST lpitem;
  200. memset(&bf, 0, sizeof(BROWSEINFO));
  201. bf.hwndOwner = hWnd;
  202. bf.lpszTitle = L"选择路径 ";
  203. bf.ulFlags = BIF_RETURNONLYFSDIRS; //属性你可自己选择
  204. lpitem = SHBrowseForFolder(&bf);
  205. if (lpitem == NULL) //如果没有选择路径则返回 0
  206. return 0;
  207. //如果选择了路径则复制路径,返回路径长度
  208. SHGetPathFromIDListA(lpitem, pBuffer);
  209. return lstrlen(pBuffer);
  210. }
  211. bool Everything_Start(void)
  212. {
  213. Everything_SetSearch(L"Everything.exe");
  214. bool EQRet = Everything_Query(TRUE);
  215. if (EQRet == false) {
  216. STARTUPINFO si;
  217. PROCESS_INFORMATION pi;
  218. ZeroMemory(&si, sizeof(si));
  219. si.cb = sizeof(si);
  220. // 后台隐藏
  221. si.dwFlags = STARTF_USESHOWWINDOW;
  222. si.wShowWindow = SW_HIDE;
  223. ZeroMemory(&pi, sizeof(pi));
  224. // Start the child process.
  225. CreateProcess(NULL, "Everything.exe", NULL, NULL, FALSE, 0,
  226. NULL, NULL, &si, &pi);
  227. }
  228. return true;
  229. }