|
本帖最后由 liuyuxi 于 2015-1-11 02:44 编辑
为朋友设计的一款小程序,核心功能比较简单,就是细节方面比较繁琐。这段时间比较忙,断断续续的写了几天,总算接近尾声了,刚好昨天重装系统,桌面上的其他文件都备份了,唯独这份源码没有备份。在重装系统前,我又格式化了两次C盘... 结果悲剧了....最后用数据恢复软件,总算找回核心代码。花了半天的时间总算恢复完成了... 虽然对于我来说程序没多大作用,但看到朋友那么开心,我也觉得很开心... 设计出让用户满意的程序还真不容易... 核心功能重要,人性化也很重要...
程序界面: 常规模式:
精简模式:
计算模式介绍:
1、计算当前文本
计算当前记事本活动窗口的字数。
2、计算剪切板
计算当前剪切板中的字数。
3、计算文本文件
通过弹出 打开文件 对话框 中获取文件路径,读取该文件并统计。
(无论在何种模式,只要将纯文本文件拖拽至程序界面 会自动转至 计算文本文件模式,并得到该文件的字数统计结果)
知识点:
实现窗体拖拽: 在MFC ClassWizard添加消息响应:WM_DROPPFILES,要先在 Class Info列表中的 Advanced options 下Message filter: 选中 Window 才会有这个消息出现。
监视剪切板:在 OnInitDialog() 中 添加SetClipboardViewer(); 在MFC ClassWizard 中响应WM_DRAWCLIPBOARD消息。
设置编辑框字体颜色:响应WM_CTLCOLOR 消息:写入一下代码:
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));//设置文本背景色
pDC->SetBkMode(1);//设置背景透明
hbr = (HBRUSH)m_brush;
}
程序核心源码:
- // 字数统计Dlg.cpp : implementation file
- #include "stdafx.h"
- #include "字数统计.h"
- #include "字数统计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"中文字数"
- #define My_ChineseBD"中文标点"
- #define My_English"英文字数"
- #define My_EnglishBD"英文标点"
- #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; // 剪切板标记
- 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
- /*********************************************************************************
- * 功能:把相关配置信息读、写到注册表
- * 参数:ReadWrite:读、写(Read、Write)RWWeiZhi:读写位置
- *Title:注册表键名 InOutTEXT:输入输出数据
- * 返回值:读取成功返回 TRUE 将结果复制到InOutTEXT 失败返回 FALSE 原因复制到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, "字数统计\\%s", RWWeiZhi);
- // 读取数据
- 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);// 将结果复制到 InOutTEXT
- return TRUE;
- }
- else
- {
- RegCloseKey(RegKey);
- strcpy(InOutTEXT, "查询注册表失败");// 将原因复制到 InOutTEXT
- return FALSE;
- }
- }
- else
- {
- strcpy(InOutTEXT, "打开注册表失败");
- return FALSE;
- }
- }
- // 写数据
- 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, "写入信息成功");// 将结果复制到 InOutTEXT
- return TRUE;
- }
- else
- {
- RegCloseKey(RegKey);
- strcpy(InOutTEXT, "写入信息失败");// 将结果复制到 InOutTEXT
- return FALSE;
- }
- }
- else
- {
- strcpy(InOutTEXT, "打开或创建注册表失败");// 将结果复制到 InOutTEXT
- return FALSE;
- }
- }
- strcpy(InOutTEXT, "输入的参数错误");
- return FALSE;
- }
- /********************************************************/
- // 读取剪切板数据
- /********************************************************/
- char* Rjqb(int *Datelen)
- {
- if (OpenClipboard(NULL)) // 打开剪切板
- {
- if (IsClipboardFormatAvailable(CF_TEXT)) // 检测剪切板是否有指定类型的剪切板数据
- {
- HANDLE hClip;
- char *pBuf;
- hClip = GetClipboardData(CF_TEXT); // 获取指定类型的剪切板数据
- pBuf = (char *)GlobalLock(hClip); // 加锁
- *Datelen = strlen(pBuf);
- GlobalUnlock(hClip);// 解锁
- CloseClipboard(); // 关闭剪切板
- return pBuf;
- }
- else
- CloseClipboard(); // 关闭剪切板
- }
- 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, " - 记事本"))// 从当前窗口标题中寻找 - 记事本 字符串
- {
- 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';// 这里一定要结尾 不然会出现乱码
- 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");
- }
- }
- // 打开文件并且统计字数
- 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, "该文件可能不是纯文本格式,是否继续分析?", "提示", 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);//设置第n行内容为显示的内容。
- 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); // 将资源载入内存并返回其在内存中首地址保存在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, 默认值0
- 0,//亮度, 0-255, 默认值0
- 15,//锐度, 0-255, 默认值0
- 0,//阴影大小, 2-19, 默认值2
- 0,//水平偏移, 0-25, 默认值0 (目前不支持)
- 0,//垂直偏移, 0-25, 默认值0 (目前不支持)
- 0,//红色分量, 0-255, 默认值 -1
- 0,//绿色分量, 0-255, 默认值 -1
- 0);//蓝色分量, 0-255, 默认值 -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);//设置第n行内容为显示的内容。
- //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();// 监视剪切板
- // 检查记录 恢复关闭前设置
- 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);//设置第n行内容为显示的内容。
- wParam = MAKEWPARAM( IDC_COMBO_CoutMS, CBN_SELCHANGE );// 触发事件
- 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文件到界面也可得到结果】");
- 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);// 一定要先结束这些定时器 不然会很占系统资源
- //KillTimer(1);
- ReadJqb = FALSE;
- CButton *SumRate; // 定义对象
- SumRate = (CButton *)GetDlgItem(IDC_CHECK_Sumrate);
- char Tmp[20] = {0};
- if (SumRate->GetCheck()) // 设置计算频率
- {
- MyRegedit("Read", My_Timerlen, My_Timerlen, Tmp);
- SetDlgItemText(IDC_EDIT_Timerlen, Tmp);
- GetDlgItem(IDC_EDIT_Timerlen)->EnableWindow(1);
- }
- else// 默认计算频率
- {
- 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);// 一定要先结束这些定时器 不然会很占系统资源
- //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);// 在原有的数据重新相加
- }
- 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文件到界面也可得到结果】");
- KillTimer(0);
- ReadJqb = FALSE;
- //KillTimer(1);
- if (iPos == 0)
- {
- CButton *SumRate; // 定义对象
- SumRate = (CButton *)GetDlgItem(IDC_CHECK_Sumrate);
- if (SumRate->GetCheck()) // 设置计算频率
- 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);// 先获取数据长度
- if (Datelen)
- {
- TmpJqb = new char[Datelen+1];
- strcpy(TmpJqb, Rjqb(&Datelen));// 再次获取内容
- 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
- }
- // 实现拖拽统计
- void CMyDlg::OnDropFiles(HDROP hDropInfo)
- {
- // TODO: Add your message handler code here and/or call default
- KillTimer(0);// 一定要先结束这些定时器 不然会很占系统资源
- //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));//设置文本背景色
- pDC->SetBkMode(1);//设置背景透明
- 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));//设置文本背景色
- pDC->SetBkMode(1);//设置背景透明
- hbr = (HBRUSH)m_brush;
- }
- return hbr;
- }
- void CMyDlg::OnJingJianMS()
- {
- if (SC_MAXIMIZEbool)
- {
- SC_MAXIMIZEbool = FALSE;
- MyWindowMS(TRUE);
- }
- else
- {
- //AfxMessageBox("退出模式");
- SC_MAXIMIZEbool = TRUE;
- MyWindowMS(FALSE);
- }
- }
复制代码
|
|