⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 versionsearcher.cpp

📁 一本非常好的关于VC方面的书
💻 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 + -