标题:
编程练习作品 -> 字数统计
[打印本页]
作者:
liuyuxi
时间:
2015-1-10 23:33
标题:
编程练习作品 -> 字数统计
本帖最后由 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);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1