|
本帖最后由 liuyuxi 于 2015-1-11 02:44 編輯
為朋友設(shè)計的一款小程序,核心功能比較簡單,就是細(xì)節(jié)方面比較繁瑣。這段時間比較忙,斷斷續(xù)續(xù)的寫了幾天,總算接近尾聲了,剛好昨天重裝系統(tǒng),桌面上的其他文件都備份了,唯獨(dú)這份源碼沒有備份。在重裝系統(tǒng)前,我又格式化了兩次C盤... 結(jié)果悲劇了....最后用數(shù)據(jù)恢復(fù)軟件,總算找回核心代碼。花了半天的時間總算恢復(fù)完成了... 雖然對于我來說程序沒多大作用,但看到朋友那么開心,我也覺得很開心... 設(shè)計出讓用戶滿意的程序還真不容易... 核心功能重要,人性化也很重要...
程序界面: 常規(guī)模式: 
精簡模式:
計算模式介紹:
1、計算當(dāng)前文本
計算當(dāng)前記事本活動窗口的字?jǐn)?shù)。
2、計算剪切板
計算當(dāng)前剪切板中的字?jǐn)?shù)。
3、計算文本文件
通過彈出 打開文件 對話框 中獲取文件路徑,讀取該文件并統(tǒng)計。
(無論在何種模式,只要將純文本文件拖拽至程序界面 會自動轉(zhuǎn)至 計算文本文件模式,并得到該文件的字?jǐn)?shù)統(tǒng)計結(jié)果)
知識點(diǎn):
實(shí)現(xiàn)窗體拖拽: 在MFC ClassWizard添加消息響應(yīng):WM_DROPPFILES,要先在 Class Info列表中的 Advanced options 下Message filter: 選中 Window 才會有這個消息出現(xiàn)。
監(jiān)視剪切板:在 OnInitDialog() 中 添加SetClipboardViewer(); 在MFC ClassWizard 中響應(yīng)WM_DRAWCLIPBOARD消息。
設(shè)置編輯框字體顏色:響應(yīng)WM_CTLCOLOR 消息:寫入一下代碼:
CBrush m_brush;
if(nCtlColor==CTLCOLOR_EDIT && pWnd->GetDlgCtrlID()==IDC_EDIT_SUMTO_JJ)//注意此處的(pWnd->),否則沒效果
{
pDC->SetTextColor(RGB(0, 0, 255)); // 設(shè)置文本顏色
pDC->SetBkColor(RGB(0,0,0));//設(shè)置文本背景色
pDC->SetBkMode(1);//設(shè)置背景透明
hbr = (HBRUSH)m_brush;
}
程序核心源碼:
- // 字?jǐn)?shù)統(tǒng)計Dlg.cpp : implementation file
- #include "stdafx.h"
- #include "字?jǐn)?shù)統(tǒng)計.h"
- #include "字?jǐn)?shù)統(tǒng)計Dlg.h"
- #pragma comment(linker,"/OPT:NOWIN98")
- #include <io.h>
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- #define My_CoutMS"計算模式"
- #define My_Timerlen"控制計算頻率"
- #define My_WindowX"窗口X位置"
- #define My_WindowY "窗口Y位置"
- #define My_Chinese"中文字?jǐn)?shù)"
- #define My_ChineseBD"中文標(biāo)點(diǎn)"
- #define My_English"英文字?jǐn)?shù)"
- #define My_EnglishBD"英文標(biāo)點(diǎn)"
- #define My_WindowZD"窗口置頂"
- #define YesNo"是否啟用"
- CMyDlg *This = NULL;
- int Timeslen = 100;
- BOOL Chineselenbool= TRUE;
- BOOL ChineseBDlenbool= FALSE;
- BOOL Englishlenbool= TRUE;
- BOOL EnglishBDlenbool= FALSE;
- double Chineselen = 0;
- double Englishlen = 0;
- double ChineseBDlen = 0;
- double EnglishBDlen = 0;
- BOOL SC_MAXIMIZEbool = TRUE;
- BOOL ReadJqb= FALSE; // 剪切板標(biāo)記
- int MyWindowWidth= 0;// 窗體寬度
- int MyWindowHeigth= 0;// 窗體高度
- int MyKFWindowHeigth = 42; // 有皮膚時精簡模式的高度
- typedef int(__stdcall* FunSkinH_AttachEx)( LPCTSTR strSkinFile, LPCTSTR strPassword);
- typedef int(__stdcall* FunSkinH_AdjustAero)( int nAlpha, int nShwDark, int nShwSharp, int nShwSize, int nX, int nY, int nRed, int nGreen, int nBlue );
- typedef int(__stdcall* FunSkinH_SetMenuAlpha)( int nAlpha );
- typedef int(__stdcall* FunSkinH_Map)( HWND hWnd, int nType );
- typedef int(__stdcall* FunSkinH_SetForeColor)( HWND hWnd, int nRed, int nGreen, int nBlue );
- #define TYPE_PICTURE1018//圖片框
- /////////////////////////////////////////////////////////////////////////////
- // CAboutDlg dialog used for App About
- class CAboutDlg : public CDialog
- {
- public:
- CAboutDlg();
- // Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
- // Implementation
- protected:
- //{{AFX_MSG(CAboutDlg)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
- {
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
- }
- void CAboutDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- // No message handlers
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMyDlg dialog
- CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CMyDlg::IDD, pParent)
- {
- //{{AFX_DATA_INIT(CMyDlg)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- This = this;
- }
- void CMyDlg::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CMyDlg)
- // NOTE: the ClassWizard will add DDX and DDV calls here
- //}}AFX_DATA_MAP
- }
- BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
- //{{AFX_MSG_MAP(CMyDlg)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_CHECK_Sumrate, OnCHECKSumrate)
- ON_EN_CHANGE(IDC_EDIT_Timerlen, OnChangeEDITTimerlen)
- ON_BN_CLICKED(IDC_CHECK_Chinese, OnCHECKChinese)
- ON_BN_CLICKED(IDC_CHECK_ChineseBD, OnCHECKChineseBD)
- ON_BN_CLICKED(IDC_CHECK_English, OnCHECKEnglish)
- ON_BN_CLICKED(IDC_CHECK_EnglishBD, OnCHECKEnglishBD)
- ON_BN_CLICKED(IDC_RADIO_TOP, OnRadioTop)
- ON_BN_CLICKED(IDC_RADIO_NOTOP, OnRadioNotop)
- ON_CBN_SELCHANGE(IDC_COMBO_CoutMS, OnSelchangeCOMBOCoutMS)
- ON_WM_DRAWCLIPBOARD()
- ON_WM_MOVE()
- ON_WM_DROPFILES()
- ON_WM_CTLCOLOR()
- ON_BN_CLICKED(IDC_JingJianMS, OnJingJianMS)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CMyDlg message handlers
- /*********************************************************************************
- * 功能:把相關(guān)配置信息讀、寫到注冊表
- * 參數(shù):ReadWrite:讀、寫(Read、Write)RWWeiZhi:讀寫位置
- *Title:注冊表鍵名 InOutTEXT:輸入輸出數(shù)據(jù)
- * 返回值:讀取成功返回 TRUE 將結(jié)果復(fù)制到InOutTEXT 失敗返回 FALSE 原因復(fù)制到InOutTEXT
- **********************************************************************************/
- BOOL MyRegedit(char ReadWrite[], char RWWeiZhi[], char Title[], char InOutTEXT[])
- {
- char KeyName[MAX_PATH] = {0};// 鍵值名
- char Tmp[MAX_PATH] = {0};// 臨時變量
- HKEY RegKey;// 注冊表句柄
- DWORD type, size = MAX_PATH;
- sprintf(KeyName, "字?jǐn)?shù)統(tǒng)計\\%s", RWWeiZhi);
- // 讀取數(shù)據(jù)
- if (strcmp(ReadWrite, "Read") == 0)
- {
- if(RegOpenKeyEx(HKEY_CURRENT_USER, KeyName, 0, KEY_ALL_ACCESS, &RegKey) == ERROR_SUCCESS)
- {
- if (RegQueryValueEx(RegKey, Title, 0, &type, (unsigned char*)Tmp, &size) == ERROR_SUCCESS)
- {
- RegCloseKey(RegKey);
- strcpy(InOutTEXT, Tmp);// 將結(jié)果復(fù)制到 InOutTEXT
- return TRUE;
- }
- else
- {
- RegCloseKey(RegKey);
- strcpy(InOutTEXT, "查詢注冊表失敗");// 將原因復(fù)制到 InOutTEXT
- return FALSE;
- }
- }
- else
- {
- strcpy(InOutTEXT, "打開注冊表失敗");
- return FALSE;
- }
- }
- // 寫數(shù)據(jù)
- if (strcmp(ReadWrite, "Write") == 0)
- {
- // 打開注冊表
- if(RegCreateKeyEx(HKEY_CURRENT_USER, KeyName, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &RegKey, &type) == ERROR_SUCCESS)
- {
- //const char* res=md5(InOutTEXT);// 加密
- if(RegSetValueEx(RegKey, Title, 0, REG_SZ, (unsigned char*)InOutTEXT, strlen(InOutTEXT)) == ERROR_SUCCESS)
- {
- RegCloseKey(RegKey);
- strcpy(InOutTEXT, "寫入信息成功");// 將結(jié)果復(fù)制到 InOutTEXT
- return TRUE;
- }
- else
- {
- RegCloseKey(RegKey);
- strcpy(InOutTEXT, "寫入信息失敗");// 將結(jié)果復(fù)制到 InOutTEXT
- return FALSE;
- }
- }
- else
- {
- strcpy(InOutTEXT, "打開或創(chuàng)建注冊表失敗");// 將結(jié)果復(fù)制到 InOutTEXT
- return FALSE;
- }
- }
- strcpy(InOutTEXT, "輸入的參數(shù)錯誤");
- return FALSE;
- }
- /********************************************************/
- // 讀取剪切板數(shù)據(jù)
- /********************************************************/
- char* Rjqb(int *Datelen)
- {
- if (OpenClipboard(NULL)) // 打開剪切板
- {
- if (IsClipboardFormatAvailable(CF_TEXT)) // 檢測剪切板是否有指定類型的剪切板數(shù)據(jù)
- {
- HANDLE hClip;
- char *pBuf;
- hClip = GetClipboardData(CF_TEXT); // 獲取指定類型的剪切板數(shù)據(jù)
- pBuf = (char *)GlobalLock(hClip); // 加鎖
- *Datelen = strlen(pBuf);
- GlobalUnlock(hClip);// 解鎖
- CloseClipboard(); // 關(guān)閉剪切板
- return pBuf;
- }
- else
- CloseClipboard(); // 關(guān)閉剪切板
- }
- return NULL;
- }
- void ShowJG(double Sum, char OutJg[])
- {
- int Sumlen = 0;
- char Temp[MAX_PATH*100] = {0};
- char JieGuo[MAX_PATH*100] = {0};
- sprintf(Temp,"%.3080f", Sum);
- Sumlen = strlen(Temp)-1;
- while(Temp[Sumlen--] == '0');
- Temp[Sumlen+1] = '\0';
- Sumlen = strlen(Temp)-1;
- int JieGuoSy=0, TempSy=0, k=0;
- for (; Sumlen>=0; Sumlen--,k++,TempSy++,JieGuoSy++)
- {
- if (k==4)
- {
- k=0;
- JieGuo[JieGuoSy] = ',';
- JieGuoSy++;
- }
- JieGuo[JieGuoSy] = Temp[Sumlen];
- }
- JieGuo[JieGuoSy] = '\0';
- strrev(JieGuo);
- strcpy(OutJg, JieGuo);
- }
- void SunJG(char *Tmp, BOOL Cout)
- {
- double Sum = 0;
- /*double Chineselen = 0;
- double Englishlen = 0;
- double ChineseBDlen = 0;
- double EnglishBDlen = 0;*/
- char Temp[MAX_PATH*100] = {0};
- if (Cout)// 這是計算文本的模式 否則就只是單單相加計算而已
- {
- Chineselen = 0;
- Englishlen = 0;
- ChineseBDlen = 0;
- EnglishBDlen = 0;
- while(*Tmp)
- {
- if(*Tmp<0)
- {
- if ((*Tmp&0xFF)>=0xB0 && (*Tmp&0xFF) <= 0xF7)
- {
- Chineselen++;
- }
- else
- {
- ChineseBDlen++;
- }
- *Tmp++;
- *Tmp++;
- }
- else
- {
- if ( *Tmp>=32 && *Tmp<=47 || *Tmp>=58 && *Tmp<=64 || *Tmp>=91 && *Tmp<=96 || *Tmp>=123 && *Tmp<=126 || *Tmp == 13 )
- {
- EnglishBDlen++;
- if(*Tmp == 13)
- Englishlen--;
- }
- else
- Englishlen++;
- *Tmp++;
- }
- }
- }
- /*sprintf(Temp,"%.3080f",Chineselen);
- int i = strlen(Temp)-1;
- while(Temp[i--] == '0');
- Temp[i+1] = 0;
- This->SetDlgItemText(IDC_EDIT_Chinese, Temp);
- sprintf(Temp,"%.3080f",Englishlen);
- i = strlen(Temp)-1;
- while(Temp[i--] == '0');
- Temp[i+1] = 0;
- This->SetDlgItemText(IDC_EDIT_English, Temp);
- sprintf(Temp,"%.3080f",ChineseBDlen);
- i = strlen(Temp)-1;
- while(Temp[i--] == '0');
- Temp[i+1] = 0;
- This->SetDlgItemText(IDC_EDIT_ChineseBD, Temp);
- sprintf(Temp,"%.3080f",EnglishBDlen);
- i = strlen(Temp)-1;
- while(Temp[i--] == '0');
- Temp[i+1] = 0;
- This->SetDlgItemText(IDC_EDIT_EnglishBD, Temp);
- */
- if(Chineselenbool)
- Sum += Chineselen;
- if(ChineseBDlenbool)
- Sum += ChineseBDlen;
- if(Englishlenbool)
- Sum += Englishlen;
- if (EnglishBDlenbool)
- Sum += EnglishBDlen;
- /*sprintf(Temp,"%.3080f",Sum);
- i = strlen(Temp)-1;
- while(Temp[i--] == '0');
- Temp[i+1] = 0;*/
- memset(Temp, 0, MAX_PATH+100);
- ShowJG(Chineselen, Temp);
- This->SetDlgItemText(IDC_EDIT_Chinese, Temp);
- memset(Temp, 0, MAX_PATH+100);
- ShowJG(ChineseBDlen, Temp);
- This->SetDlgItemText(IDC_EDIT_ChineseBD, Temp);
- memset(Temp, 0, MAX_PATH+100);
- ShowJG(Englishlen, Temp);
- This->SetDlgItemText(IDC_EDIT_English, Temp);
- memset(Temp, 0, MAX_PATH+100);
- ShowJG(EnglishBDlen, Temp);
- This->SetDlgItemText(IDC_EDIT_EnglishBD, Temp);
- memset(Temp, 0, MAX_PATH+100);
- ShowJG(Sum, Temp);
- This->SetDlgItemText(IDC_EDIT_SUMTO, Temp);
- This->SetDlgItemText(IDC_EDIT_SUMTO_JJ, Temp);
- }
- void CALLBACK ScanDangQText(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
- {
- char WindowsText[MAX_PATH] = {0};
- HWND DangQWindowhWnd = GetForegroundWindow();
- HWND EdithWnd = NULL;
- DWORD Textlen = 0;
- GetWindowText(DangQWindowhWnd, WindowsText, MAX_PATH);
- if (strstr(WindowsText, " - 記事本"))// 從當(dāng)前窗口標(biāo)題中尋找 - 記事本 字符串
- {
- EdithWnd = ::FindWindowEx(DangQWindowhWnd, NULL, "Edit", NULL);
- Textlen =::SendMessage(EdithWnd, WM_GETTEXTLENGTH, (WPARAM)0, (LPARAM)0) + 1;
- char *Tmp = new char[Textlen+1];
- SendMessage(EdithWnd, WM_GETTEXT, Textlen, (LPARAM)Tmp);
- Tmp[Textlen] = '\0';// 這里一定要結(jié)尾 不然會出現(xiàn)亂碼
- This->SetDlgItemText(IDC_STATIC_ZT, WindowsText);
- SunJG(Tmp, TRUE);
- if(Tmp)
- delete []Tmp;
- }
- }
- void MyWindowMS(BOOL MIZ)
- {
- char Tmp[20] = {0};
- int x=0, y=0;
- MyRegedit("Read", My_WindowX, My_WindowX, Tmp);
- x = atoi(Tmp);
- MyRegedit("Read", My_WindowY, My_WindowY, Tmp);
- y = atoi(Tmp);
- if (MIZ)// 精簡模式
- {
- if (MyKFWindowHeigth == 42)
- x += 105;
- else
- x += 115;
- MoveWindow(This->m_hWnd, x, y, 129, MyKFWindowHeigth, TRUE);
- ::SetWindowPos(This->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
- ShowWindow(GetDlgItem(This->m_hWnd, IDC_EDIT_SUMTO_JJ), TRUE);
- MoveWindow(GetDlgItem(This->m_hWnd, IDC_EDIT_SUMTO_JJ), -6, NULL, 129, 20, TRUE);
- ShowWindow(GetDlgItem(This->m_hWnd, IDC_STATIC2), FALSE);
- //strcpy(Tmp, "Yes");
- }
- else// 還原模式
- {
- MoveWindow(This->m_hWnd, x, y, MyWindowWidth, MyWindowHeigth, TRUE);
- ShowWindow(GetDlgItem(This->m_hWnd, IDC_STATIC2), TRUE);
- ShowWindow(GetDlgItem(This->m_hWnd, IDC_EDIT_SUMTO_JJ), FALSE);
- if (BST_CHECKED != SendDlgItemMessage(This->m_hWnd, IDC_RADIO_TOP, BM_GETCHECK, 0, 0))
- ::SetWindowPos(This->m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
- //strcpy(Tmp, "No");
- }
- }
- // 打開文件并且統(tǒng)計字?jǐn)?shù)
- void OpenFile(char FilePath[])
- {
- DWORD FileSize = 0;
- DWORD Size = 0;
- HANDLE FileHandle = NULL;
- char Tmp[MAX_PATH] = {0};
- strrev(FilePath);
- Size = strchr(FilePath, '.') - FilePath + 1;
- memcpy(Tmp, FilePath, Size);
- strrev(Tmp);
- if (strcmpi(Tmp, ".txt") != 0 && strcmpi(Tmp, ".cpp") != 0 && strcmpi(Tmp, ".c") != 0 && strcmpi(Tmp, ".h") != 0 && strcmpi(Tmp, ".asm") != 0)
- {
- if (IDNO == MessageBox(NULL, "該文件可能不是純文本格式,是否繼續(xù)分析?", "提示", MB_ICONQUESTION|MB_YESNO|MB_SYSTEMMODAL))
- return ;
- }
- Size = strchr(FilePath, '\\') - FilePath ;
- memcpy(Tmp, FilePath, Size);
- strrev(Tmp);
- strrev(FilePath);
- This->SetDlgItemText(IDC_STATIC_ZT, Tmp);
- FileHandle = CreateFile( FilePath, GENERIC_READ, FILE_SHARE_READ ,NULL, OPEN_EXISTING, NULL, NULL);
- if (FileHandle == NULL)
- return;
- FileSize = GetFileSize(FileHandle,NULL);
- if ( INVALID_FILE_SIZE == FileSize )
- {
- This->SetDlgItemText(IDC_STATIC_ZT, "無法獲取文件大小");
- CloseHandle(FileHandle);
- return;
- }
- if (FileSize == 0)
- {
- CloseHandle(FileHandle);
- This->SetDlgItemText(IDC_EDIT_Chinese, "0");
- This->SetDlgItemText(IDC_EDIT_ChineseBD, "0");
- This->SetDlgItemText(IDC_EDIT_English, "0");
- This->SetDlgItemText(IDC_EDIT_EnglishBD, "0");
- This->SetDlgItemText(IDC_EDIT_SUMTO, "0");
- This->SetDlgItemText(IDC_EDIT_SUMTO_JJ, "0");
- return ;
- }
- char *RBuf = new char[FileSize+1];
- memset(RBuf,0, FileSize);
- if (ReadFile(FileHandle, RBuf, FileSize, &Size,NULL))
- {
- if (RBuf[0] == -1)
- {
- This->SetDlgItemText(IDC_EDIT_Chinese, "0");
- This->SetDlgItemText(IDC_EDIT_ChineseBD, "0");
- This->SetDlgItemText(IDC_EDIT_English, "0");
- This->SetDlgItemText(IDC_EDIT_EnglishBD, "0");
- This->SetDlgItemText(IDC_EDIT_SUMTO, "0");
- This->SetDlgItemText(IDC_EDIT_SUMTO_JJ, "0");
- This->SetDlgItemText(IDC_STATIC_ZT, "暫不支持非 ANSI 編碼文件!");
- CloseHandle(FileHandle);
- return;
- }
- RBuf[FileSize] = '\0';
- }
- else
- {
- This->SetDlgItemText(IDC_STATIC_ZT, "讀取文件失敗~");
- CloseHandle(FileHandle);
- return;
- }
- CloseHandle(FileHandle);
- //((CComboBox*)GetDlgItem(IDC_COMBO_CoutMS))->SetCurSel(2);//設(shè)置第n行內(nèi)容為顯示的內(nèi)容。
- SunJG(RBuf, TRUE);
- if (RBuf)
- delete []RBuf;
- }
- BOOL NewZiYuan(char SK[], char SF[])
- {
- // 如果 dll不存在
- if (_access(SK, 0) == -1)
- {
- char a[98277] = {0};
- HRSRC hRc=FindResource(NULL,"SK","tmp");
- if(!hRc)return FALSE;
- HGLOBAL hg=LoadResource(NULL,hRc); // 將資源載入內(nèi)存并返回其在內(nèi)存中首地址保存在hg中
- DWORD dw=SizeofResource(NULL,hRc); // 獲得資源大小并用dw保存資源大小
- memset(a,0,sizeof(a));
- memcpy(a,hg,dw);
- FILE *out=fopen(SK, "wb+");
- fwrite(a,1,dw,out);
- fclose(out);
- }
- if (_access(SF, 0) == -1)
- {
- char b[30422] = {0};
- HRSRC hRc1=FindResource(NULL,"SF","tmp");
- if(!hRc1)return FALSE;
- HGLOBAL hg=LoadResource(NULL,hRc1);
- DWORD dw=SizeofResource(NULL,hRc1);
- memset(b,0,sizeof(b));
- memcpy(b,hg,dw);
- FILE *out=fopen(SF, "wb+");
- fwrite(b,1,dw,out);
- fclose(out);
- }
- return TRUE;
- }
- BOOL CMyDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- /*CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- */
- SetIcon(m_hIcon, TRUE);// Set big icon
- SetIcon(m_hIcon, FALSE);// Set small icon
- char Tmp[100] = {0};
- char Temp[100] = {0};
- DWORD dwSize=100;
- GetTempPath(dwSize, Tmp);//獲取臨時文件夾路徑
- strcpy(Temp, Tmp);
- strcat(Tmp, "Sk.tmp");
- strcat(Temp, "Sf.tmp");
- // 讀取自身資源文件 釋放皮膚文件
- if (NewZiYuan(Tmp, Temp))
- {
- // 加載皮膚
- HINSTANCE hInstance = NULL;
- hInstance = ::LoadLibrary(Tmp);
- if (hInstance)
- {
- FunSkinH_AttachEx SkinH_AttachEx = (FunSkinH_AttachEx)GetProcAddress(hInstance, "SkinH_AttachEx");
- FunSkinH_AdjustAero SkinH_AdjustAero = (FunSkinH_AdjustAero)GetProcAddress(hInstance, "SkinH_AdjustAero");
- FunSkinH_SetMenuAlpha SkinH_SetMenuAlpha = (FunSkinH_SetMenuAlpha)GetProcAddress(hInstance, "SkinH_SetMenuAlpha");
- FunSkinH_Map SkinH_Map = (FunSkinH_Map)GetProcAddress(hInstance, "SkinH_Map");
- FunSkinH_SetForeColor SkinH_SetForeColor = (FunSkinH_SetForeColor)GetProcAddress(hInstance, "SkinH_SetForeColor");
- if (!SkinH_AttachEx(Temp, NULL))
- {
- SkinH_AdjustAero(
- 180,//透明度, 0-255, 默認(rèn)值0
- 0,//亮度, 0-255, 默認(rèn)值0
- 15,//銳度, 0-255, 默認(rèn)值0
- 0,//陰影大小, 2-19, 默認(rèn)值2
- 0,//水平偏移, 0-25, 默認(rèn)值0 (目前不支持)
- 0,//垂直偏移, 0-25, 默認(rèn)值0 (目前不支持)
- 0,//紅色分量, 0-255, 默認(rèn)值 -1
- 0,//綠色分量, 0-255, 默認(rèn)值 -1
- 0);//藍(lán)色分量, 0-255, 默認(rèn)值 -1
- SkinH_SetMenuAlpha(190);
- SkinH_Map( GetDlgItem(IDC_STATIC1)->m_hWnd, TYPE_PICTURE);
- SkinH_Map( GetDlgItem(IDC_STATIC2)->m_hWnd, TYPE_PICTURE);
- SkinH_Map( GetDlgItem(IDC_STATIC3)->m_hWnd, TYPE_PICTURE);
- SkinH_SetForeColor(GetDlgItem(IDC_RADIO_NOTOP)->m_hWnd, 0, 0, 255);
- SkinH_SetForeColor(GetDlgItem(IDC_RADIO_TOP)->m_hWnd, 0, 0, 255);
- MyKFWindowHeigth = 55;
- }
- else
- AfxMessageBox("加載皮膚失敗 ~");
- }
- else
- AfxMessageBox("加載皮膚 dll 失敗 ~");
- }
- else
- AfxMessageBox(" 讀取自身資源文件失敗 ~");
- ((CComboBox*)GetDlgItem(IDC_COMBO_CoutMS))->SetCurSel(0);//設(shè)置第n行內(nèi)容為顯示的內(nèi)容。
- //SetDlgItemText(IDC_EDIT_Timerlen, "0.1");
- SetDlgItemText(IDC_EDIT_Chinese, "0");
- SetDlgItemText(IDC_EDIT_ChineseBD, "0");
- SetDlgItemText(IDC_EDIT_English, "0");
- SetDlgItemText(IDC_EDIT_EnglishBD, "0");
- SetDlgItemText(IDC_EDIT_SUMTO, "0");
- SetDlgItemText(IDC_EDIT_SUMTO_JJ, "0");
- ((CButton *)GetDlgItem (IDC_RADIO_TOP))->SetCheck(TRUE);
- ((CButton *)GetDlgItem (IDC_CHECK_Chinese))->SetCheck(TRUE);
- ((CButton *)GetDlgItem (IDC_CHECK_English))->SetCheck(TRUE);
- ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
- SetClipboardViewer();// 監(jiān)視剪切板
- // 檢查記錄 恢復(fù)關(guān)閉前設(shè)置
- int x=0, y=0;
- WPARAM wParam;
- CRect rect;
- GetWindowRect(&rect);
- MyWindowWidth = rect.Width();
- MyWindowHeigth = rect.Height();
- MyRegedit("Read", My_WindowX, My_WindowX, Tmp);
- x = atoi(Tmp);
- MyRegedit("Read", My_WindowY, My_WindowY, Tmp);
- y = atoi(Tmp);
- if (x>0 && y>0)
- MoveWindow( x, y, MyWindowWidth, MyWindowHeigth, TRUE);
- MyRegedit("Read", My_CoutMS, My_CoutMS, Tmp);
- x = atoi(Tmp);
- if (x<0)x = 0;
- ((CComboBox*)GetDlgItem(IDC_COMBO_CoutMS))->SetCurSel(x);//設(shè)置第n行內(nèi)容為顯示的內(nèi)容。
- wParam = MAKEWPARAM( IDC_COMBO_CoutMS, CBN_SELCHANGE );// 觸發(fā)事件
- SendMessage( WM_COMMAND, wParam, (LPARAM)( ( (CComboBox*) GetDlgItem(IDC_COMBO_CoutMS)) -> m_hWnd ));
- MyRegedit("Read", My_Timerlen, My_Timerlen, Tmp);
- SetDlgItemText(IDC_EDIT_Timerlen, Tmp);
- KillTimer(0);
- SetTimer(0, 100, ScanDangQText);
- MyRegedit("Read", My_Chinese, YesNo, Tmp);
- if(strcmp(Tmp, "Yes") == 0)
- {
- Chineselenbool = TRUE;
- ((CButton *)GetDlgItem (IDC_CHECK_Chinese))->SetCheck(TRUE);
- }
- else
- {
- if (strcmp(Tmp, "No") == 0)
- ((CButton *)GetDlgItem (IDC_CHECK_Chinese))->SetCheck(FALSE);
- }
- MyRegedit("Read", My_ChineseBD, YesNo, Tmp);
- if(strcmp(Tmp, "Yes") == 0)
- {
- ChineseBDlenbool = TRUE;
- ((CButton *)GetDlgItem (IDC_CHECK_ChineseBD))->SetCheck(TRUE);
- }
- else
- ((CButton *)GetDlgItem (IDC_CHECK_ChineseBD))->SetCheck(FALSE);
- MyRegedit("Read", My_English, YesNo, Tmp);
- if(strcmp(Tmp, "Yes") == 0)
- {
- Englishlenbool = TRUE;
- ((CButton *)GetDlgItem (IDC_CHECK_English))->SetCheck(TRUE);
- }
- else
- {
- if (strcmp(Tmp, "No") == 0)
- ((CButton *)GetDlgItem (IDC_CHECK_English))->SetCheck(FALSE);
- }
- MyRegedit("Read", My_EnglishBD, YesNo, Tmp);
- if(strcmp(Tmp, "Yes") == 0)
- {
- EnglishBDlenbool = TRUE;
- ((CButton *)GetDlgItem (IDC_CHECK_EnglishBD))->SetCheck(TRUE);
- }
- else
- ((CButton *)GetDlgItem (IDC_CHECK_EnglishBD))->SetCheck(FALSE);
- SunJG(NULL, FALSE);
- MyRegedit("Read", My_WindowZD, YesNo, Tmp);
- if(strcmp(Tmp, "Yes") == 0)
- {
- ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
- ((CButton *)GetDlgItem (IDC_RADIO_TOP))->SetCheck(TRUE);
- }
- else
- {
- if (strcmp(Tmp, "No") == 0)
- {
- ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
- ((CButton *)GetDlgItem (IDC_RADIO_TOP))->SetCheck(FALSE);
- ((CButton *)GetDlgItem (IDC_RADIO_NOTOP))->SetCheck(TRUE);
- }
- }
- SetDlgItemText(IDC_STATIC_ZT, "【拖拽txt文件到界面也可得到結(jié)果】");
- return TRUE; // return TRUE unless you set the focus to a control
- }
- void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
- {
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else if ((nID & 0xFFF0) == SC_MAXIMIZE)
- {
- if (SC_MAXIMIZEbool)
- {
- SC_MAXIMIZEbool = FALSE;
- MyWindowMS(TRUE);
- }
- else
- {
- //AfxMessageBox("退出模式");
- SC_MAXIMIZEbool = TRUE;
- MyWindowMS(FALSE);
- }
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
- }
- // If you add a minimize button to your dialog, you will need the code below
- // to draw the icon. For MFC applications using the document/view model,
- // this is automatically done for you by the framework.
- void CMyDlg::OnPaint()
- {
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
- }
- // The system calls this to obtain the cursor to display while the user drags
- // the minimized window.
- HCURSOR CMyDlg::OnQueryDragIcon()
- {
- return (HCURSOR) m_hIcon;
- }
- void CMyDlg::OnCHECKSumrate()
- {
- // TODO: Add your control notification handler code here
- KillTimer(0);// 一定要先結(jié)束這些定時器 不然會很占系統(tǒng)資源
- //KillTimer(1);
- ReadJqb = FALSE;
- CButton *SumRate; // 定義對象
- SumRate = (CButton *)GetDlgItem(IDC_CHECK_Sumrate);
- char Tmp[20] = {0};
- if (SumRate->GetCheck()) // 設(shè)置計算頻率
- {
- MyRegedit("Read", My_Timerlen, My_Timerlen, Tmp);
- SetDlgItemText(IDC_EDIT_Timerlen, Tmp);
- GetDlgItem(IDC_EDIT_Timerlen)->EnableWindow(1);
- }
- else// 默認(rèn)計算頻率
- {
- Timeslen = 100;
- GetDlgItem(IDC_EDIT_Timerlen)->EnableWindow(0);
- }
- int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CoutMS))->GetCurSel();
- if (iPos == 0)
- SetTimer(0, Timeslen, ScanDangQText);
- if (iPos == 1)
- ReadJqb = TRUE;
- //SetTimer(1, Timeslen, ScanJqb);
- }
- void CMyDlg::OnChangeEDITTimerlen()
- {
- KillTimer(0);// 一定要先結(jié)束這些定時器 不然會很占系統(tǒng)資源
- //KillTimer(1);
- /*BOOL flag;
- Timeslen = GetDlgItemInt(IDC_EDIT_Timerlen, &flag, true);*/
- char Time[MAX_PATH] = {0};
- GetDlgItemText(IDC_EDIT_Timerlen, Time, MAX_PATH);
- Timeslen = (int)atof(Time)*1000;
- if (atof(Time)*1000 >=100 )
- {
- MyRegedit("Write", My_Timerlen, My_Timerlen, Time);
- int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CoutMS))->GetCurSel();
- if (iPos == 0)
- SetTimer(0, Timeslen, ScanDangQText);
- if (iPos == 1)
- ReadJqb = TRUE;
- //SetTimer(1, Timeslen, ScanJqb);
- SetDlgItemText(IDC_STATIC_ZT, "更改計算頻率生效");
- }
- else
- {
- SetDlgItemText(IDC_EDIT_Timerlen, "0.1");
- SetDlgItemText(IDC_STATIC_ZT, "計算頻率不允許低于0.1");
- }
- }
- void CMyDlg::OnCHECKChinese()
- {
- CButton *SumRate; // 定義對象
- SumRate = (CButton *)GetDlgItem(IDC_CHECK_Chinese);
- char Tmp[20] = {0};
- if (SumRate->GetCheck())
- {
- strcpy(Tmp, "Yes");
- Chineselenbool = TRUE;
- }
- else
- {
- strcpy(Tmp, "No");
- Chineselenbool = FALSE;
- }
- MyRegedit("Write", My_Chinese, YesNo, Tmp);
- SunJG(NULL, FALSE);// 在原有的數(shù)據(jù)重新相加
- }
- void CMyDlg::OnCHECKChineseBD()
- {
- CButton *SumRate; // 定義對象
- SumRate = (CButton *)GetDlgItem(IDC_CHECK_ChineseBD);
- char Tmp[20] = {0};
- if (SumRate->GetCheck())
- {
- strcpy(Tmp, "Yes");
- ChineseBDlenbool = TRUE;
- }
- else
- {
- strcpy(Tmp, "No");
- ChineseBDlenbool = FALSE;
- }
- MyRegedit("Write", My_ChineseBD, YesNo, Tmp);
- SunJG(NULL, FALSE);
- }
- void CMyDlg::OnCHECKEnglish()
- {
- CButton *SumRate; // 定義對象
- SumRate = (CButton *)GetDlgItem(IDC_CHECK_English);
- char Tmp[20];
- if (SumRate->GetCheck())
- {
- strcpy(Tmp, "Yes");
- Englishlenbool = TRUE;
- }
- else
- {
- strcpy(Tmp, "No");
- Englishlenbool = FALSE;
- }
- MyRegedit("Write", My_English, YesNo, Tmp);
- SunJG(NULL, FALSE);
- }
- void CMyDlg::OnCHECKEnglishBD()
- {
- CButton *SumRate; // 定義對象
- SumRate = (CButton *)GetDlgItem(IDC_CHECK_EnglishBD);
- char Tmp[20];
- if (SumRate->GetCheck())
- {
- strcpy(Tmp, "Yes");
- EnglishBDlenbool = TRUE;
- }
- else
- {
- strcpy(Tmp, "No");
- EnglishBDlenbool = FALSE;
- }
- MyRegedit("Write", My_EnglishBD, YesNo, Tmp);
- SunJG(NULL, FALSE);
- }
- void CMyDlg::OnRadioTop()
- {
- ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
- char Tmp[20] = "Yes";
- MyRegedit("Write", My_WindowZD, YesNo, Tmp);
- }
- void CMyDlg::OnRadioNotop()
- {
- ::SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
- char Tmp[20] = "No";
- MyRegedit("Write", My_WindowZD, YesNo, Tmp);
- }
- void CMyDlg::OnSelchangeCOMBOCoutMS()
- {
- int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CoutMS))->GetCurSel();
- This->SetDlgItemText(IDC_EDIT_Chinese, "0");
- This->SetDlgItemText(IDC_EDIT_ChineseBD, "0");
- This->SetDlgItemText(IDC_EDIT_English, "0");
- This->SetDlgItemText(IDC_EDIT_EnglishBD, "0");
- This->SetDlgItemText(IDC_EDIT_SUMTO, "0");
- This->SetDlgItemText(IDC_EDIT_SUMTO_JJ, "0");
- This->SetDlgItemText(IDC_STATIC_ZT, "【拖拽txt文件到界面也可得到結(jié)果】");
- KillTimer(0);
- ReadJqb = FALSE;
- //KillTimer(1);
- if (iPos == 0)
- {
- CButton *SumRate; // 定義對象
- SumRate = (CButton *)GetDlgItem(IDC_CHECK_Sumrate);
- if (SumRate->GetCheck()) // 設(shè)置計算頻率
- GetDlgItem(IDC_EDIT_Timerlen)->EnableWindow(1);
- GetDlgItem(IDC_CHECK_Sumrate)->EnableWindow(1);
- SetTimer(0, Timeslen, ScanDangQText);
- }
- if (iPos == 1)
- {
- GetDlgItem(IDC_EDIT_Timerlen)->EnableWindow(0);
- GetDlgItem(IDC_CHECK_Sumrate)->EnableWindow(0);
- //SetTimer(1, Timeslen, ScanJqb);
- ReadJqb = TRUE;
- This->OnDrawClipboard();
- }
- if (iPos == 2)
- {
- GetDlgItem(IDC_EDIT_Timerlen)->EnableWindow(0);
- GetDlgItem(IDC_CHECK_Sumrate)->EnableWindow(0);
- char FilePath[MAX_PATH] = {0};
- CFileDialog dlg(TRUE, "DEM Files (*DEM)", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,
- "純文本文件 (*.txt、*.cpp、*.c、*.h、*.asm)|*.txt; *.cpp; *.c; *.h; *.asm||",NULL);
- dlg.m_ofn.lpstrTitle="請選擇文件";
- if(dlg.DoModal()==IDOK)
- {
- strcpy(FilePath,dlg.GetPathName());
- if (strlen(FilePath))
- OpenFile(FilePath);
- }
- }
- /*char Tmp[20] = {0};
- sprintf(Tmp, "%d", iPos);
- MyRegedit("Write", My_CoutMS, My_CoutMS, Tmp);*/
- }
- CScrollBar* CMyDlg::GetScrollBarCtrl(int nBar) const
- {
- // TODO: Add your specialized code here and/or call the base class
- return CDialog::GetScrollBarCtrl(nBar);
- }
- void CMyDlg::OnDrawClipboard()
- {
- CDialog::OnDrawClipboard();
- if(ReadJqb)
- {
- int Datelen = 0;
- char *TmpJqb = NULL;
- Rjqb(&Datelen);// 先獲取數(shù)據(jù)長度
- if (Datelen)
- {
- TmpJqb = new char[Datelen+1];
- strcpy(TmpJqb, Rjqb(&Datelen));// 再次獲取內(nèi)容
- This->SetDlgItemText(IDC_STATIC_ZT, TmpJqb);
- SunJG(TmpJqb, TRUE);
- if(TmpJqb)
- delete []TmpJqb;
- }
- }
- }
- void CMyDlg::OnMove(int x, int y)
- {
- CDialog::OnMove(x, y);
- char Buf[100] = {0};
- static int X=0, Y=0;
- RECT rect;
- GetWindowRect(&rect);
- if (X != rect.left)
- {
- X = rect.left;
- if (!SC_MAXIMIZEbool)
- {
- if (MyKFWindowHeigth == 42) // 如果是沒有皮膚的
- X -= 105;
- else
- X -= 115;
- }
- sprintf(Buf, "%d", X);
- MyRegedit("Write", My_WindowX, My_WindowX, Buf);
- }
- if (Y != rect.top)
- {
- Y = rect.top;
- sprintf(Buf, "%d", Y);
- MyRegedit("Write", My_WindowY, My_WindowY, Buf);
- }
- // TODO: Add your message handler code here
- }
- // 實(shí)現(xiàn)拖拽統(tǒng)計
- void CMyDlg::OnDropFiles(HDROP hDropInfo)
- {
- // TODO: Add your message handler code here and/or call default
- KillTimer(0);// 一定要先結(jié)束這些定時器 不然會很占系統(tǒng)資源
- //KillTimer(1);
- ReadJqb = FALSE;
- UINT count;
- char FilePath[MAX_PATH] = {0};
- GetDlgItem(IDC_EDIT_Timerlen)->EnableWindow(0);
- GetDlgItem(IDC_CHECK_Sumrate)->EnableWindow(0);
- count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
- if(count)
- {
- for(UINT i=0; i<count; i++)
- {
- int pathLen = DragQueryFile(hDropInfo, i,FilePath,sizeof(FilePath));
- OpenFile(FilePath);
- ((CComboBox*)GetDlgItem(IDC_COMBO_CoutMS))->SetCurSel(2);
- DragFinish(hDropInfo);
- }
- }
- DragFinish(hDropInfo);
- CDialog::OnDropFiles(hDropInfo);
- }
- HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
- {
- HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
- CBrush m_brush;
- if(nCtlColor==CTLCOLOR_EDIT && pWnd->GetDlgCtrlID()==IDC_EDIT_SUMTO_JJ)//注意此處的(pWnd->),否則沒效果
- {
- pDC->SetTextColor(RGB(0, 0, 255));
- pDC->SetBkColor(RGB(0,0,0));//設(shè)置文本背景色
- pDC->SetBkMode(1);//設(shè)置背景透明
- hbr = (HBRUSH)m_brush;
- }
- if(nCtlColor==CTLCOLOR_EDIT && pWnd->GetDlgCtrlID()==IDC_EDIT_SUMTO)//注意此處的(pWnd->),否則沒效果
- {
- pDC->SetTextColor(RGB( 0, 0, 255));
- pDC->SetBkColor(RGB(0,0,0));//設(shè)置文本背景色
- pDC->SetBkMode(1);//設(shè)置背景透明
- hbr = (HBRUSH)m_brush;
- }
- return hbr;
- }
- void CMyDlg::OnJingJianMS()
- {
- if (SC_MAXIMIZEbool)
- {
- SC_MAXIMIZEbool = FALSE;
- MyWindowMS(TRUE);
- }
- else
- {
- //AfxMessageBox("退出模式");
- SC_MAXIMIZEbool = TRUE;
- MyWindowMS(FALSE);
- }
- }
復(fù)制代碼
|
|