📄 versionsearcher.cpp
字号:
#include "VersionSearcher.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int iShowCmd)
{
MSG message;
InitCommonControls();
InitFonts(g_hFonts);
g_hInstance = hInstance;
ZeroMemory(&g_VersionDetail, sizeof(VERSION_DETAIL));
g_hwndSearcher = CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_VERSIONSEARCHER),
NULL, (DLGPROC)DlgVersionSearcherProc);
ShowWindow(g_hwndSearcher, SW_SHOW);
UpdateWindow(g_hwndSearcher);
while(GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}
DeleteFonts(g_hFonts);
return message.wParam;
}
LRESULT CALLBACK DlgVersionSearcherProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HBITMAP hbmpExitUp;
static HBITMAP hbmpExitDown;
static HBITMAP hbmpSearchUp;
static HBITMAP hbmpSearcherBK;
static HBITMAP hbmpSearchDown;
static HBITMAP enterlabel;
static HICON iconk;
static TCHAR szAbtFileName[MAX_PATH] = {0};
static TCHAR *icontext=TEXT("版本速查");
switch(message)
{
case WM_INITDIALOG:
{
hbmpExitUp = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_EXIT_UP));
hbmpExitDown = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_EXIT_DOWN));
hbmpSearchUp = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_SEARCH_UP));
hbmpSearcherBK = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_SEARCHERBK));
hbmpSearchDown = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_SEARCH_DOWN));
enterlabel = LoadBitmap(g_hInstance,MAKEINTRESOURCE(IDB_ENTERLABEL));
iconk = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON1));
//设置输入字体;
SendMessage(GetDlgItem(hWnd, IDC_BOOKNAME), WM_SETFONT, WPARAM(g_hFonts[fontBookName]), 0);
//在对话框中创建WC_LISTVIEW;
CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL, WS_CHILD | WS_VISIBLE | LVS_REPORT,
7, 111, 533, 205, hWnd, (HMENU)IDC_VERSIONTABLE, g_hInstance, NULL);
chSETDLGICONS(hWnd, IDI_ICON1); //设置最小化图标
SendMessage(hWnd, WM_SETTEXT,NULL, (LPARAM)icontext); //设置最小化标题
InitVersionTable(GetDlgItem(hWnd, IDC_VERSIONTABLE));
SendMessage(GetDlgItem(hWnd, IDC_VERSIONTABLE), WM_SETFONT, WPARAM(g_hFonts[fontVersionTable]), 0);
SetWndPosition(hWnd);
return true;
}
case WM_PAINT:
{
RECT rect;
PAINTSTRUCT paintInfo;
BeginPaint(hWnd, &paintInfo);
GetClientRect(hWnd, &rect);
DrawBmptoRect(rect, paintInfo.hdc, hbmpSearcherBK);
EndPaint(hWnd, &paintInfo);
return true;
}
case WM_SIZE:
{
RECT rect;
GetClientRect(hWnd,&rect);
InvalidateRect(hWnd,NULL,FALSE); //销毁原图重画
//设置控件位置
SetWindowPos(GetDlgItem(hWnd,IDC_LONGLABEL),NULL,8,rect.bottom-40,515,20,0);
SetWindowPos(GetDlgItem(hWnd,IDC_VERSIONTABLE),NULL,7,111,rect.right-rect.left-14,rect.bottom-rect.top-160,0);
return true;
}
case WM_LBUTTONDOWN:
{
SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
return true;
}
case WM_DRAWITEM:
switch(wParam)
{
case IDOK:
DrawBmpButton((LPDRAWITEMSTRUCT)lParam, hbmpSearchUp, hbmpSearchDown);
break;
case IDCANCEL:
DrawBmpButton((LPDRAWITEMSTRUCT)lParam, hbmpExitUp, hbmpExitDown);
break;
}
return true;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
{
GetCurrentDirectory(MAX_PATH, szAbtFileName);
GetDlgItemText(hWnd, IDC_BOOKNAME, g_VersionDetail.szBookName_Ancient, 256);
_tcscat(szAbtFileName, TEXT("\\BookVersions.abt"));
#ifdef UNICODE
GB2BIGW(g_VersionDetail.szBookName_Ancient);
#else
GB2BIG(g_VersionDetail.szBookName_Ancient);
#endif
ListView_DeleteAllItems(GetDlgItem(hWnd, IDC_VERSIONTABLE));
if(!(_tcscmp(g_VersionDetail.szBookName_Ancient, _T("")) == 0))
{
FullVersionTable(GetDlgItem(hWnd, IDC_VERSIONTABLE), szAbtFileName, g_VersionDetail.szBookName_Ancient);
}
else
{
if(GetSystemDefaultLCID() == 0x0804)
{
MessageBox(NULL, TEXT("請輸入書名!"), 0, 0);
}
else
{
MessageBox(NULL, TEXT("Please input book name!"), 0, 0);
}
}
break;
}
case IDCANCEL:
{
EndDialog(hWnd, 0);
if(hbmpExitUp) DeleteObject(hbmpExitUp);
if(hbmpExitDown) DeleteObject(hbmpExitDown);
if(hbmpSearchUp) DeleteObject(hbmpSearchUp);
if(hbmpSearcherBK) DeleteObject(hbmpSearcherBK);
if(hbmpSearchDown) DeleteObject(hbmpSearchDown);
PostQuitMessage(0);
break;
}
return true;
}
case WM_NOTIFY:
{
if(wParam == IDC_VERSIONTABLE)
{
LPNMITEMACTIVATE pnmItem = (LPNMITEMACTIVATE)lParam;
//LPNMITEMACTIVATE :包含wm_notify 消息的结构体
if(pnmItem->hdr.code == NM_DBLCLK)
{
LVITEM lvItem;
//LVITEM:包含列举框属性的结构体
lvItem.mask = LVIF_TEXT;
lvItem.iItem = pnmItem->iItem;
//获取选中条目的藏所
lvItem.iSubItem = 1;
lvItem.cchTextMax = sizeof(g_VersionDetail.szStore);
lvItem.pszText = g_VersionDetail.szStore;
ListView_GetItem(GetDlgItem(hWnd, IDC_VERSIONTABLE), &lvItem);
//获取选中条目的版本
lvItem.iSubItem = 0;
lvItem.cchTextMax = sizeof(g_VersionDetail.szVersion);
lvItem.pszText = g_VersionDetail.szVersion;
ListView_GetItem(GetDlgItem(hWnd, IDC_VERSIONTABLE), &lvItem);
while(_tcscmp(g_VersionDetail.szVersion, _T("")) == 0)
{
if(!(_tcscmp(g_VersionDetail.szStore, _T("")) == 0))
{
lvItem.iItem--;
ListView_GetItem(GetDlgItem(hWnd, IDC_VERSIONTABLE), &lvItem);
}
else
return false;
}
GetVersionDetail(szAbtFileName, &g_VersionDetail);
CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_DETAIL), NULL, (DLGPROC)DlgDetailProc);
}
}
return true;
}
}
return false;
}
LRESULT CALLBACK DlgDetailProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HBRUSH hBrush;
static HBITMAP hbmpOKUp;
static HBITMAP hbmpOKDown;
static HBITMAP hbmpDetailBK;
switch(message)
{
case WM_INITDIALOG:
{
TCHAR szTemp[512] = {0};
TCHAR szDetail[2048] = {0};
TCHAR szFormatHint[512] = {0};
TCHAR szFormatStore[128] = {0};
TCHAR szFormatAuthor[256] = {0};
TCHAR szFormatVersion[256] = {0};
TCHAR szFormatBookName[256] = {0};
TCHAR szHint[256] = {0};
hBrush = CreateSolidBrush(RGB(255,255,255));
hbmpOKUp = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_OK_UP));
hbmpOKDown = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_OK_DOWN));
hbmpDetailBK = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_DETAILBK));
CreateWindowEx(0, (LPCTSTR)_T("edit"), NULL, WS_VISIBLE|WS_CHILD|ES_READONLY|ES_MULTILINE|ES_AUTOVSCROLL|ES_LEFT|WS_VSCROLL,
5, 5, 365, 135, hWnd, (HMENU)IDC_DETAIL, g_hInstance, 0);
#ifdef UNICODE //Unicode 字符集下使用代码
//缓存器g_VersionDetail.szBookName_Versiion里的内容写入szFormatBookName中
FormatTextW((wchar_t*)g_VersionDetail.szBookName_Version, (wchar_t*)szFormatBookName, GetDlgItem(hWnd, IDC_DETAIL), 15);
if(!(_tcscmp(g_VersionDetail.szExpand, _T("")) == 0))
{
_stprintf(szTemp, _T("%s(%s)"), g_VersionDetail.szAuthor, g_VersionDetail.szExpand);
FormatTextW((wchar_t*)szTemp, (wchar_t*)szFormatAuthor, GetDlgItem(hWnd, IDC_DETAIL), 15);
}
else
{
FormatTextW((wchar_t*)g_VersionDetail.szAuthor, (wchar_t*)szFormatAuthor, GetDlgItem(hWnd, IDC_DETAIL), 15);
}
FormatTextW((wchar_t*)g_VersionDetail.szVersion, (wchar_t*)szFormatVersion, GetDlgItem(hWnd, IDC_DETAIL), 15);
FormatTextW((wchar_t*)g_VersionDetail.szHint, (wchar_t*)szFormatHint, GetDlgItem(hWnd, IDC_DETAIL), 15);
_stprintf(szDetail, _T("\r\n 書名:%s\r\n 作者:%s\r\n 版本:%s\r\n"),
szFormatBookName, szFormatAuthor, szFormatVersion);
if(!(_tcscmp(szFormatHint, _T("")) == 0))
{
_stprintf(szHint,_T(" 註 :%s\r\n"), szFormatHint);
}
FormatTextW((wchar_t*)g_VersionDetail.szStore, (wchar_t*)szFormatStore, GetDlgItem(hWnd, IDC_DETAIL), 15);
_stprintf(szTemp, _T(" 藏所:%s\r\n"),szFormatStore );
_tcscat(szDetail,szHint);
_tcscat(szDetail,szTemp);
#else
FormatText(g_VersionDetail.szBookName_Version, szFormatBookName, GetDlgItem(hWnd, IDC_DETAIL), 15);
if(!(_tcscmp(g_VersionDetail.szExpand, TEXT("")) == 0))
{
_stprintf(szTemp, TEXT("%s(%s)"), g_VersionDetail.szAuthor, g_VersionDetail.szExpand);
FormatText(szTemp, szFormatAuthor, GetDlgItem(hWnd, IDC_DETAIL), 15);
}
else
{
FormatText(g_VersionDetail.szAuthor, szFormatAuthor, GetDlgItem(hWnd, IDC_DETAIL), 15);
}
FormatText(g_VersionDetail.szVersion, szFormatVersion, GetDlgItem(hWnd, IDC_DETAIL), 15);
FormatText(g_VersionDetail.szHint, szFormatHint, GetDlgItem(hWnd, IDC_DETAIL), 15);
_stprintf(szDetail, TEXT("\r\n 書名:%s\r\n 作者:%s\r\n 版本:%s\r\n"),
szFormatBookName, szFormatAuthor, szFormatVersion );
if(!(_tcscmp(szFormatHint, _T("")) == 0))
{
_stprintf(szHint,TEXT(" 註 :%s\r\n"),szFormatHint);
}
FormatText(g_VersionDetail.szStore, szFormatStore, GetDlgItem(hWnd, IDC_DETAIL), 15);
_stprintf(szTemp, TEXT(" 藏所:%s\r\n"), szFormatStore);
_tcscat(szDetail, szHint);
_tcscat(szDetail,szTemp);
#endif
SendMessage(GetDlgItem(hWnd, IDC_DETAIL), WM_SETFONT, WPARAM(g_hFonts[fontDetail]), 0);
SetDlgItemText(hWnd, IDC_DETAIL, szDetail);
SetWndPosition(hWnd);
return true;
}
case WM_PAINT:
{
RECT rect;
PAINTSTRUCT paintInfo;
BeginPaint(hWnd, &paintInfo);
GetClientRect(hWnd, &rect);
DrawBmptoRect(rect, paintInfo.hdc, hbmpDetailBK);
EndPaint(hWnd, &paintInfo);
return true;
}
case WM_DRAWITEM:
if(wParam == IDOK)
{
DrawBmpButton((PDRAWITEMSTRUCT)lParam, hbmpOKUp, hbmpOKDown);
return true;
}
case WM_CTLCOLORSTATIC:
{
return (long)hBrush;
}
break;
case WM_LBUTTONDOWN:
{
SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
return true;
}
case WM_COMMAND:
if(wParam == IDOK)
{
EndDialog(hWnd, 0);
if(hBrush) DeleteObject(hBrush);
if(hbmpOKUp) DeleteObject(hbmpOKUp);
if(hbmpOKDown) DeleteObject(hbmpOKDown);
if(hbmpDetailBK) DeleteObject(hbmpDetailBK);
return true;
}
case WM_KEYDOWN:
if(wParam == IDC_DETAIL)
{
return true;
}
}
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -