📄 ddlg.cpp
字号:
::ZeroMemory(&lf,sizeof(lf)); //API函数,它将一块内存清零
lf.lfHeight =90;
lf.lfWeight =FW_NORMAL; //, FW_NORMAL常规 FW_BOLD;粗体
lf.lfItalic =false;
::lstrcpy(lf.lfFaceName ,"Verdana");
m_font.CreatePointFontIndirect(&lf);
GetDlgItem(IDC_STATE)->SetFont(&m_font);
CString str;
str.Format("你选择的监视目录为 %s",m_strWatchedDir);
GetDlgItem(IDC_STATE)->SetWindowText(str);
GetDlgItem(IDC_STOP)->EnableWindow(false);
if(m_bAlwaysOnTop)
OnBtnAlwaysOnTop();
if(this->m_bMinimized)
PostMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0);
if(this->m_bAutoStart)
this->OnStart();
::RegisterHotKey(m_hWnd,199,MOD_ALT,'Z');
return TRUE;
}
void CDDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
if(nID==SC_MINIMIZE)
{
ShowWindow(SW_HIDE);
}
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 CDDlg::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 CDDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
BOOL CDDlg::StartWatch(CString path)
{
m_strWatchedDir = path;
DWORD ThreadId; //创建一个新线程用于监视
m_hThread=::CreateThread(NULL,0,ThreadProc,this,0,&ThreadId );
return NULL!=m_hThread;
}
void CDDlg::OnSelectDir()
{
CBrowseFolder Dlg;
if(Dlg.DoModal(this,NULL)==IDOK)
{
m_strWatchedDir=Dlg.GetDirPath();
::WritePrivateProfileString("Settings",
"监视目录",
m_strWatchedDir,
".\\Settings.ini");
GetDlgItem(IDC_STATE)->SetWindowText("你选择了监视 "+m_strWatchedDir);
}
}
void CDDlg::OnStart()
{
this->StartWatch(m_strWatchedDir);
GetDlgItem(IDC_STOP)->EnableWindow(true);
GetDlgItem(IDC_START)->EnableWindow(false);
GetDlgItem(IDC_SELECT_DIR)->EnableWindow(false);
GetDlgItem(IDC_STATE)->SetWindowText("正在监视... "+m_strWatchedDir);
}
void CDDlg::OnStop()
{
GetDlgItem(IDC_STATE)->SetWindowText("停止了监视"+m_strWatchedDir);
if(m_hThread !=NULL)
{
::TerminateThread(m_hThread, 0 );
m_hThread = NULL;
}
if(hDir !=INVALID_HANDLE_VALUE)
{
CloseHandle( hDir );
hDir = INVALID_HANDLE_VALUE;
}
GetDlgItem(IDC_STOP)->EnableWindow(false);
GetDlgItem(IDC_START)->EnableWindow(true);
GetDlgItem(IDC_SELECT_DIR)->EnableWindow(true);
}
void CDDlg::OnClear()
{
PlaySound(MAKEINTRESOURCE(IDR_WAVE2),AfxGetResourceHandle(),SND_RESOURCE|SND_PURGE|SND_NODEFAULT);
m_list.DeleteAllItems();
}
void CDDlg::OnBtnAlwaysOnTop()
{
UpdateData();
if (m_bAlwaysOnTop)
{
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | WS_EX_TOPMOST);
::WritePrivateProfileString("Settings","AlwaysOnTop",m_bAlwaysOnTop? "1":"0",".\\Settings.ini");
}
else
{
::SetWindowPos(GetSafeHwnd(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
::WritePrivateProfileString("Settings","AlwaysOnTop",m_bAlwaysOnTop? "1":"0",".\\Settings.ini");
}
}
void CDDlg::OnAbout()
{
//CAboutDlg dd;
CLogoDlg dd;
dd.DoModal();
}
void CDDlg::OnNosound()
{
UpdateData(true);
::WritePrivateProfileString("Settings","AutoStart",m_bAutoStart? "1":"0",".\\Settings.ini");
}
void CDDlg::OnCheckMinimized()
{
UpdateData(true);
::WritePrivateProfileString("Settings","Minimized",m_bMinimized? "1":"0",".\\Settings.ini");
}
void CDDlg::OnCheckAutorun()
{
UpdateData(true);
const TCHAR gcszAutoRunKey[]= _T( "Software\\microsoft\\windows\\currentversion\\run" );
const TCHAR gcszWindowClass[] = _T("关驱控制");//设置开机程序自启动键值位置和其下新建子键值(可设为程序名)
HKEY hKey;
LONG lRet, lRet2;
DWORD dwLength, dwDataType;
TCHAR szItemValue[MAX_PATH], szPrevValue[MAX_PATH];
TCHAR szBuffer[MAX_PATH];
GetModuleFileName( NULL, szItemValue, MAX_PATH ); // 得到程序全路径名
//MessageBox(szItemValue);
lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE, gcszAutoRunKey,0, KEY_READ | KEY_WRITE, &hKey );
if( lRet != ERROR_SUCCESS ) // 打开注册表键
{
MessageBox("设置自动启动失败,请检查注册表是否被禁用!","使闹钟",MB_OK| MB_ICONEXCLAMATION);
}
dwLength = sizeof( szBuffer );
lRet = RegQueryValueEx( hKey, gcszWindowClass,NULL, &dwDataType, (LPBYTE)szBuffer, &dwLength );
// 查询AutoRun项目是否存在
if( m_bAutoRun ) // 添加
{
::WritePrivateProfileString("Settings","AutoRun",m_bAutoRun? "1":"0",".\\Settings.ini");
if( lRet != ERROR_SUCCESS ) // AutoRun项目不存在
lRet2 = RegSetValueEx( hKey, gcszWindowClass,0, REG_SZ, (LPBYTE)szItemValue, strlen( szItemValue ) );
else // 存在, 比较二者是否相同
{
dwLength = sizeof( szPrevValue );
lRet2 = RegQueryValueEx( hKey, gcszWindowClass,0, &dwDataType,(LPBYTE)szPrevValue, &dwLength );
if( lstrcmp( szItemValue, szPrevValue ) ) // 不相同则替换
{
lRet2 = RegDeleteValue( hKey, gcszWindowClass );
lRet2 = RegSetValueEx( hKey, gcszWindowClass,0, REG_SZ,(LPBYTE)szItemValue, strlen( szItemValue ) );
}
}
}
else // 删除
{
if( lRet == ERROR_SUCCESS )
lRet2 = RegDeleteValue( hKey, gcszWindowClass ); // AutoRun项目已存在则删除
::WritePrivateProfileString("Settings","AutoRun",m_bAutoRun? "1":"0",".\\Settings.ini");
}
RegCloseKey( hKey ); // 关闭注册表键
if( lRet2 != ERROR_SUCCESS )
{}// MessageBox("设置自动启动失败,请检查注册表是否被禁用!","使闹钟",MB_OK| MB_ICONEXCLAMATION);
}
void CDDlg::OnHotKey(WPARAM wp,LPARAM lp)
{
if(wp==199)
{
if(IsWindowVisible())
ShowWindow(SW_HIDE);
else
ShowWindow(SW_SHOWNORMAL);
}
}
BOOL CDDlg::DestroyWindow()
{
::UnregisterHotKey(m_hWnd,199);
return CDialog::DestroyWindow();
}
BOOL CDDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message==WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_ESCAPE:
ShowWindow(SW_HIDE);
return true;
break;
case VK_RETURN:
return true;
break;
default: break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
HBRUSH CDDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID()==IDC_STATE)
pDC->SetTextColor(RGB(0,0,255));
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CDDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
ReleaseCapture();
SendMessage(WM_NCLBUTTONDOWN,HTCAPTION,0);
CDialog::OnLButtonDown(nFlags, point);
}
void CDDlg::OnSelections()
{
CSelectDlg sel;
if(sel.DoModal()==IDOK)
{
this->m_bAddNew0=sel.m_bAddNew;
this->m_bDel0=sel.m_bDel;
this->m_bModify0=sel.m_bModify;
this->m_bRename0=sel.m_bRename;
this->m_bOther0=sel.m_bOther;
::WritePrivateProfileString("Selections","m_bAddNew",sel.m_bAddNew? "1":"0",".\\Settings.ini");
::WritePrivateProfileString("Selections","m_bDel",sel.m_bDel? "1":"0",".\\Settings.ini");
::WritePrivateProfileString("Selections","m_bModify",sel.m_bModify? "1":"0",".\\Settings.ini");
::WritePrivateProfileString("Selections","m_bRename",sel.m_bRename? "1":"0",".\\Settings.ini");
::WritePrivateProfileString("Selections","m_bOther",sel.m_bOther? "1":"0",".\\Settings.ini");
}
}
void CDDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
int nIndex = m_list.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
if(nIndex == -1)
return;
char buf[200];
m_list.GetItemText(nIndex,3,buf,200);
CString str;
str=this->m_strWatchedDir+"\\"+buf;
::ShellExecute(NULL,"open",str,NULL,NULL,SW_SHOW);
*pResult = 0; *pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -