锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎭? 鎬濊礬灝辨槸榪欐牱, 榪欓噷涓婂叧閿唬鐮佸惂
FunSetLayeredWindowAttributes funSetLayeredWindowAttributes;
funSetLayeredWindowAttributes = (FunSetLayeredWindowAttributes)GetProcAddress(GetModuleHandle("user32.dll"), "SetLayeredWindowAttributes");ModifyStyleEx(NULL, 0x80000/*WS_EX_LAYERED*/); //紿楀彛瑕佹湁WS_EX_LAYERED灞炴ф墠鑳界敤璁劇疆閫忔槑鐨勯偅涓狝PI
鍚屾牱, 鍦∣nCancel鏂規(guī)硶閲岄潰娣誨姞涓涓畾鏃跺櫒, 欏轟究鎶奍DT_SHOW瀹氭椂鍣ㄧ粰KILL鎺?br />
SetTimer(IDT_EXIT, 50, NULL);
OnTimer鏂規(guī)硶榪欐牱鍐?
{
case IDT_SHOW:
funSetLayeredWindowAttributes(this->m_hWnd, 0, m_current % 255, 2);
m_current += 5;
if(m_current >= 255)
KillTimer(IDT_SHOW);
break;
case IDT_EXIT:
m_current -= 5;
funSetLayeredWindowAttributes(this->m_hWnd, 0, m_current % 255, 2);
if(m_current <= 5)
{
CDialog::OnCancel();
KillTimer(IDT_EXIT);
}
break;
}
寰堢畝鍗曞惂, 涓涓貳鍏ユ祬鍑烘晥鏋滃氨鍑烘潵浜?br />
鍙?
static鎺т歡鑳屾櫙閫忔槑
娣誨姞WM_CTLCOLOR娑堟伅鏄犲皠
娣誨姞鍝嶅簲鍑芥暟
瀹炵幇鍝嶅簲鍑芥暟
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
榪欓噷, 灝佽浜嗕竴涓熀綾? 鏂逛究浠ュ悗鐢?br />FadeIODlg.h
class CFadeIODlg : public CDialog
{
DECLARE_MESSAGE_MAP()
public:
CFadeIODlg(UINT uDLGID, CWnd* pParent = NULL);
virtual ~CFadeIODlg();
protected:
virtual void DoDataExchange(CDataExchange* pDX);
virtual void OnCancel();
virtual void OnOK();
afx_msg BOOL OnInitDialog();
afx_msg void OnTimer(UINT nIDEvent);
private:
enum{ TIME_BEGIN = 100, TIME_END = 101};
typedef BOOL (__stdcall *FUNSetLayeredWindowAttributes)(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
FUNSetLayeredWindowAttributes m_funTransparent;
enum{
MAX_TRANSPARENT = 255, //鏈澶ч忔槑搴?/span>
NUM_BEGIN = 10, //寮濮嬭鏃跺櫒鏃墮棿闂撮殧
NUM_END = 10, //緇撴潫璁℃椂鍣ㄦ椂闂撮棿闅?/span>
NUM_CHANGE = 5, //鏀瑰彉閫忔槑搴?/span>
};
int m_currentTransparent; //褰撳墠紿楀彛閫忔槑搴?/span>
};
FadeIODlg.cpp
#include "UI.h"
#include "FadeIODlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CFadeIODlg::CFadeIODlg(UINT uDLGID, CWnd* pParent /* = NULL */)
: CDialog(uDLGID, pParent)
{}
CFadeIODlg::~CFadeIODlg()
{}
void CFadeIODlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CFadeIODlg, CDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()
BOOL CFadeIODlg::OnInitDialog()
{
CDialog::OnInitDialog();
ModifyStyleEx(0, 0x80000);
m_currentTransparent = 0;
m_funTransparent = (FUNSetLayeredWindowAttributes)GetProcAddress(GetModuleHandle("User32.dll"), "SetLayeredWindowAttributes");
if(m_funTransparent)
{
//m_funTransparent(this->GetSafeHwnd(), 0, 0, 2);
SetTimer(TIME_BEGIN, NUM_BEGIN, NULL);
}
return TRUE;
}
void CFadeIODlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case TIME_BEGIN:
if(m_currentTransparent <= MAX_TRANSPARENT)
{
m_funTransparent(this->GetSafeHwnd(), 0, m_currentTransparent, 2);
m_currentTransparent += NUM_CHANGE;
}
else
KillTimer(TIME_BEGIN);
break;
case TIME_END:
if(m_currentTransparent >= 0)
{
if(m_currentTransparent > MAX_TRANSPARENT)
m_currentTransparent = MAX_TRANSPARENT;
m_funTransparent(this->GetSafeHwnd(), 0, m_currentTransparent, 2);
m_currentTransparent -= NUM_CHANGE;
}
else
{
KillTimer(TIME_END);
CDialog::OnCancel();
}
break;
}
}
void CFadeIODlg::OnOK()
{
}
void CFadeIODlg::OnCancel()
{
if(m_funTransparent)
{
KillTimer(TIME_BEGIN);
SetTimer(TIME_END, NUM_END, NULL);
}
else
CDialog::OnCancel();
}
ok, 瀹屾垚, 浠ュ悗鐩存帴緇ф壙榪欎釜瀵硅瘽妗? 紼嶅井淇敼涓涓? 鏁堟灉灝卞嚭鏉ヤ簡
]]>
]]>
鐒跺悗, 褰撴垜鍦ㄥ璇濇宸ョ▼閫鍑虹殑鏃跺? 鍙戠幇榪欎釜ExitInstance鏂規(guī)硶騫舵病鏈夎璋冪敤, 鎴戝氨鏈変簺緋婃秱, baidu+google, ...
鐒跺悗, 鎴戝氨鎯? 鎴戞坊鍔犱竴涓猘pp綾葷殑鏋愭瀯鏂規(guī)硶綆椾簡, 浣嗗彂鐜拌繖涓瀽鏋勫嚱鏁拌繕鏄寮傜殑娌¤璋冪敤...
theApp鍘熸湰鏄竴涓叏灞瀵硅薄, 瀹冪殑鏋勯犲拰鏋愭瀯鍘熸湰灝辨槸CRT搴撴潵澶勭悊鐨?br />
鍚庢潵鍙戠幇, 鍙鍦╰heApp瀵硅薄鐨勬垚鍛業(yè)nitInstance鏂規(guī)硶榪斿洖TRUE(榛樿鏄繑鍥濬ALSE)灝卞彲浠ユ垚鍔熺殑璋冪敤ExitInstance鍜屾瀽鏋勫嚱鏁頒簡
ok, 璇″紓鐨処nitInstance榪斿洖FALSE鍚? 灝變笉浼?xì)璋冪敤theApp瀵硅薄鐨勬瀽鏋?
]]>
閰嶇疆濂藉簱鐜鍚? 涓嬮潰鍐欏嚭浣跨敤GDI Plus鐨勫熀鏈楠?
1.鍖呭惈澶存枃浠?br />#include <gdiplus.h>
2.浣跨敤鍚嶅瓧絀洪棿
using namespace Gdiplus;
3.榪炴帴蹇呰鐨勫鍏ュ簱鏂囦歡
#pragma comment(lib, "gdiplus.lib")
4.鍒濆鍖?br />
]]>
閫氳繃娣誨姞娑堟伅鍝嶅簲鍑芥暟
afx_msg UINT OnNcHitTest(CPoint point);
娣誨姞瀹?br />ON_WM_NCHITTEST()
鐒跺悗, 瀹氫箟OnNcHitTest鐨勮涓哄嵆鍙? OnNcHitTest鐨勪唬鐮佸涓?
{
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
if(rect.PtInRect(point))
return HTCAPTION;
return CDialog::OnNcHitTest(point);
}
棣栧厛, 鍙戠敓WM_NCHITTEST娑堟伅鐨勬椂鍊? 紼嬪簭鍏堝彇寰楀鎴峰尯鐨勭獥鍙g煩褰? 榪欓噷鐢ㄥ埌GetClientRect鏂規(guī)硶寰楀埌, 鐢變簬GetClientRect鍙栧緱鐨勬槸鐩稿浜庣獥鍙e潗鏍囩郴緇? 浣哋nNcHitTest鐨勫弬鏁皃oint鍗存槸鐩稿浜庡睆騫曠殑鍧愭爣緋葷粺, 鎵浠ヨ繖閲岀敤鍒頒簡ClientToScreen鎶婂彇鍒扮殑瀹㈡埛鍖虹煩褰㈣漿鎴愮浉瀵逛簬灞忓箷鐨勫潗鏍? 鐒跺悗鐢–Rect綾葷殑PtInRect鏂規(guī)硶鍒ゆ柇point鏄惁钀藉湪榪欎釜鐭╁艦閲岄潰, 濡傛灉鏄? 鍒欒繑鍥濰TCAPTION(灝辯浉褰撲簬榪欐鐐瑰嚮鏄偣鍑?yán)L爣棰樻爮), 鎵浠? 灝卞彲浠ヨ繖鏍鋒潵鎷栧姩紿楀彛浜? 濡傛灉, OnNcHitTest鐩存帴榪斿洖HTCAPTION鐨勮瘽, 閭d箞, 浣嗙敤鎴風(fēng)偣鍑婚潪瀹㈡埛鍖虹殑鏃跺? 鏈変簺鍔熻兘浼?xì)澶辨? 姣斿鐐瑰嚮緋葷粺鐨勫叧闂寜閽? 璇曚竴涓嬪氨浼?xì)鍙戠幇杩欎釜鎸夐挳鏃犳晥浜? ok, 濡傛灉鐐瑰嚮鐨勬槸闈炲鎴風(fēng), 鑰呯洿鎺ヨ繑鍥濩Dialog::OnNcHitTest(point), 榪欏氨鏄寜榛樿澶勭悊浜?
浠ヤ笂鐨勮繖涓柟娉曟瘮杈冮夯鐑? 鍏跺疄鍙互鏇寸畝鍗曚竴鐐? 鍙鍏堣皟鐢ㄧ埗綾葷殑OnNcHitTest(point), 鍙栧緱榪斿洖鍊? 鍦ㄥ垽鏂槸涓嶆槸HTCLIENT, 濡傛灉鏄? 鍒欒繑鍥濰TCAPTION, 鍚﹀垯鐩存帴榪斿洖鐖剁被OnNcHitTest(point)鐨勮繑鍥炲煎氨ok浜? 淇敼鍚庡涓?
{
UINT uRet = CDialog::OnNcHitTest(point);
if(HTCLIENT == uRet)
return HTCAPTION;
return uRet;
}
鍐嶇畝鍖栦竴涓? 灝辨垚榪欐牱瀛?
{
UINT uRet = CDialog::OnNcHitTest(point);
return (HTCLIENT == uRet) ? HTCAPTION : uRet;
}
]]>
鍒涘緩鍙瓑寰呰鏃跺櫒鍐呮牳瀵硅薄, 鍙互瀹炵幇綾諱技鍔熻兘, 鐜板湪, 涓嬭竟緇欏嚭濡備綍浣跨敤鍙瓑寰呰鏃跺櫒鍐呮牳瀵硅薄
LPCWSTR pszWatchDogName,
DWORD dwPeriod,
DWORD dwWait,
DWORD dwDfltAction,
DWORD dwParam,
DWORD dwFlags
);
2.SetWaitableTimer
__in HANDLE hTimer,
__in const LARGE_INTEGER* pDueTime,
__in LONG lPeriod,
__in_opt PTIMERAPCROUTINE pfnCompletionRoutine,
__in_opt LPVOID lpArgToCompletionRoutine,
__in BOOL fResume
);
CreateWatchDogTimer鍑芥暟灝辨槸鍒涘緩涓涓彲絳夊緟浜嬩歡鍐呮牳瀵硅薄
SetWaitableTimer鍑芥暟灝辨槸璁劇疆鍐呮牳瀵硅薄鐨勮Е鍙戞椂闂村拰鏃墮棿闂撮殧
搴熻瘽涓嶅璇翠簡, 榪欓噷鐩存帴涓婁唬鐮?br />
{
SYSTEMTIME st;
st.wYear = 2012;
st.wDay = 10;
st.wDayOfWeek = 0;
st.wHour = 20;
st.wMilliseconds = 0;
st.wMinute = 16;
st.wMonth = 5;
st.wSecond = 0;
FILETIME localft;
FILETIME utc;
SystemTimeToFileTime(&st, &localft);
LocalFileTimeToFileTime(&localft, &utc);
LARGE_INTEGER liUTC;
liUTC.LowPart = utc.dwLowDateTime;
liUTC.HighPart = utc.dwHighDateTime;
m_Timer = CreateWaitableTimer(NULL, FALSE, NULL);
SetWaitableTimer(m_Timer, &liUTC, 10 * 1000, NULL, NULL, FALSE);
}
void CDialogDemoDlg::ThreadProc2(CDialogDemoDlg* pDlg)
{
while(1)
{
DWORD ret = WaitForSingleObject(pDlg->m_Timer, INFINITE);
if(WAIT_OBJECT_0 == ret)
{
AfxMessageBox("鍙瓑寰呬簨浠跺唴鏍稿璞¤Е鍙?");
}
}
}
ThreadProc2鏄竴涓嚎紼? 褰撴椂闂翠竴鍒? WaitForSingleObject灝變細(xì)榪斿洖, 鍥犱負(fù)榪欓噷鍒涘緩鐨勬槸涓涓嚜鍔ㄥ浣嶅唴鏍稿璞? 璇翠互WaitForSingleObject榪斿洖鏄細(xì)鑷姩鎶婂唴鏍稿璞″浣? 榪欓噷涓烘紨紺? 鍐欎簡涓寰幆, 鎵浠? 涓嬩竴嬈¤皟鐢╓aitForSingleObject鏃? 濡傛灉鏃墮棿鏈埌, 綰跨▼浠葷劧浼?xì)琚寕钃v.
鍏蜂綋鐢ㄦ硶緇嗚妭, MSDN
鍙傝? windows鏍稿績緙栫▼
]]>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
FILETIME fTm;
SYSTEMTIME sysTm;
HANDLE hFile;
hFile = CreateFile("d:/test.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
cout << "no" <<endl;
}
GetLocalTime(&sysTm);
sysTm.wYear = 2013;
SystemTimeToFileTime(&sysTm, &fTm);
BOOL bRet = SetFileTime(hFile, &fTm, &fTm, &fTm);
int ret = GetLastError();
if(bRet)
{
cout << "ok" <<endl;
}
return 0;
}
涓昏璋冪敤SystemTimeToFileTime
]]>
{
TCHAR szBuf[4096];
GetClassName(hwnd, szBuf, sizeof(szBuf));
string str = szBuf;
if(!str.compare("#32770"))
{
HWND hSubWnd = GetDlgItem(hwnd, 0xffff);
if(hSubWnd)
{
int len = GetWindowText(hSubWnd, szBuf, sizeof(szBuf));
cout << "yes:" <<szBuf <<endl;
}
}
return TRUE;
}
int main()
{
EnumWindows(EnumWindowsProc, NULL);
return 0;
}
]]>