標(biāo)題:
編程練習(xí)作品 -> 字?jǐn)?shù)統(tǒng)計(jì)
[打印本頁]
作者:
liuyuxi
時(shí)間:
2015-1-10 23:33
標(biāo)題:
編程練習(xí)作品 -> 字?jǐn)?shù)統(tǒng)計(jì)
本帖最后由 liuyuxi 于 2015-1-11 02:44 編輯
為朋友設(shè)計(jì)的一款小程序,核心功能比較簡單,就是細(xì)節(jié)方面比較繁瑣。這段時(shí)間比較忙,斷斷續(xù)續(xù)的寫了幾天,總算接近尾聲了,剛好昨天重裝系統(tǒng),桌面上的其他文件都備份了,唯獨(dú)這份源碼沒有備份。在重裝系統(tǒng)前,我又格式化了兩次C盤... 結(jié)果悲劇了....最后用數(shù)據(jù)恢復(fù)軟件,總算找回核心代碼;税胩斓臅r(shí)間總算恢復(fù)完成了...
雖然對于我來說程序沒多大作用,但看到朋友那么開心,我也覺得很開心... 設(shè)計(jì)出讓用戶滿意的程序還真不容易... 核心功能重要,人性化也很重要...
程序界面:
常規(guī)模式:
精簡模式:
計(jì)算模式介紹:
1、計(jì)算當(dāng)前文本
計(jì)算當(dāng)前記事本活動窗口的字?jǐn)?shù)。
2、計(jì)算剪切板
計(jì)算當(dāng)前剪切板中的字?jǐn)?shù)。
3、計(jì)算文本文件
通過彈出 打開文件 對話框 中獲取文件路徑,讀取該文件并統(tǒng)計(jì)。
(無論在何種模式,只要將純文本文件拖拽至程序界面 會自動轉(zhuǎn)至 計(jì)算文本文件模式,并得到該文件的字?jǐn)?shù)統(tǒng)計(jì)結(jié)果)
知識點(diǎn):
實(shí)現(xiàn)窗體拖拽: 在MFC ClassWizard添加消息響應(yīng):WM_DROPPFILES,要先在 Class Info列表中的 Advanced options 下Message filter: 選中 Window 才會有這個(gè)消息出現(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)計(jì)Dlg.cpp : implementation file
#include "stdafx.h"
#include "字?jǐn)?shù)統(tǒng)計(jì).h"
#include "字?jǐn)?shù)統(tǒng)計(jì)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"計(jì)算模式"
#define My_Timerlen"控制計(jì)算頻率"
#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; // 有皮膚時(shí)精簡模式的高度
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};// 臨時(shí)變量
HKEY RegKey;// 注冊表句柄
DWORD type, size = MAX_PATH;
sprintf(KeyName, "字?jǐn)?shù)統(tǒng)計(jì)\\%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ù)錯(cuò)誤");
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)// 這是計(jì)算文本的模式 否則就只是單單相加計(jì)算而已
{
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ì)字?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);//獲取臨時(shí)文件夾路徑
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é)束這些定時(shí)器 不然會很占系統(tǒng)資源
//KillTimer(1);
ReadJqb = FALSE;
CButton *SumRate; // 定義對象
SumRate = (CButton *)GetDlgItem(IDC_CHECK_Sumrate);
char Tmp[20] = {0};
if (SumRate->GetCheck()) // 設(shè)置計(jì)算頻率
{
MyRegedit("Read", My_Timerlen, My_Timerlen, Tmp);
SetDlgItemText(IDC_EDIT_Timerlen, Tmp);
GetDlgItem(IDC_EDIT_Timerlen)->EnableWindow(1);
}
else// 默認(rèn)計(jì)算頻率
{
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é)束這些定時(shí)器 不然會很占系統(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, "更改計(jì)算頻率生效");
}
else
{
SetDlgItemText(IDC_EDIT_Timerlen, "0.1");
SetDlgItemText(IDC_STATIC_ZT, "計(jì)算頻率不允許低于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è)置計(jì)算頻率
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)計(jì)
void CMyDlg::OnDropFiles(HDROP hDropInfo)
{
// TODO: Add your message handler code here and/or call default
KillTimer(0);// 一定要先結(jié)束這些定時(shí)器 不然會很占系統(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ù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1