📄 main.cpp
字号:
// now, show window
ShowWindow( hWnd,nCmdShow );
UpdateWindow( hWnd );
// Check for pocket pc version
if (IsPocketPC2002())
gTarget = 2002;
else
gTarget = 2000;
// Hook hhTaskbar
// HHoldProc = (WNDPROC)::GetWindowLong(hWndTashBar, GWL_WNDPROC);
// ::SetWindowLong(hWndTashBar, GWL_WNDPROC, (LONG)HHTaskProc);
return( TRUE );
}
/////////////////////////////////////////////////////////////////////////////
//
LRESULT CALLBACK WndProc( HWND hWnd,UINT msg,WPARAM wp,LPARAM lp )
{
switch ( msg ) {
case WM_USER+199:
MessageBox(hWnd,_T("Testing"),_T("Testing"),0);
break;
case WM_CREATE:
// create resources
if ( !Prepare(hWnd) ) {
MessageBox( hWnd,STR_CANNOT_INIT,STR_ERR_TITLE,MB_OK|MB_ICONHAND );
}
// refresh icons on taskbar
if ( gdwDispItems & DISPITEM_TASKICON ) {
RefreshTask();
}
break ;
case WM_PAINT:
// draw
Draw( hWnd );
break;
case WM_COMMAND:
return( OnCommand(hWnd,wp,lp) );
case WM_DESTROY:
ClearnupImgResource();
PostQuitMessage( 0 );
break;
case WM_ERASEBKGND:
return( 1 );
case WM_LBUTTONDOWN:
return( OnTapDown(hWnd,wp,lp) );
case WM_LBUTTONUP:
return( OnTapUp(hWnd,wp,lp) );
break ;
case WM_MEASUREITEM:
{
SIZE size ;
HDC hDC = GetDC( hWnd );
MEASUREITEMSTRUCT* lpItm = (MEASUREITEMSTRUCT*)lp ;
LPTSTR lpStr = gAppTbl[lpItm->itemID-IDM_APP_BASE].szName ;
HFONT hFntPrev ;
if ( ghMenuFont ) {
hFntPrev = (HFONT)SelectObject( ghMemDC,gfntDate.hFont );
}
if( lpItm->itemID >= IDM_APP_BASE ) {
GetTextExtentPoint32( hDC,lpStr,lstrlen(lpStr),&size );
lpItm->itemHeight = 20;//GetSystemMetrics(SM_CYMENU);
lpItm->itemWidth = size.cx + 16 ;
}
else {
GetTextExtentPoint32( hDC,(LPCTSTR)lpItm->itemData,lstrlen((LPCTSTR)lpItm->itemData),&size );
lpItm->itemHeight = size.cy + 4;
lpItm->itemWidth = size.cx + 24;
}
if ( ghMenuFont ) {
SelectObject( ghMemDC,hFntPrev );
}
ReleaseDC( hWnd,hDC );
}
break ;
case WM_DRAWITEM:
DrawTaskMenuItem( (DRAWITEMSTRUCT*)lp );
break ;
case WM_ENTERMENULOOP:
// trace tapping point(on popup menu)
HookPopupMenu();
break ;
case WM_EXITMENULOOP:
// 2-25
//SetFocused( ITEM_ID_LIST,FALSE );
gbMenuOn = FALSE ;
break ;
case WM_TIMER:
if ( wp == 1 ) {
CheckBtnState( hWnd );
}
if ( wp == 2 ) {
DrawSystemState();
InvalidateRect( hWnd,&gItemTbl[ITEM_ID_SYSTEM].rc,TRUE );
}
if ( wp == 3 ) {
CloseAppTimer( GetForegroundWindow() );
}
if ( wp == 4 ) {
VolumeTimer();
}
if ( wp == 5 ) {
if( bGradient && b2002Theme )
ThemeTimer();
}
if( wp == 6 ) {
KillTimer( hWnd,6 );
gnAppointTimer = 0;
ClientToScreen( hWnd,&ptMenuPoint );
RefreshMenuItems();
TrackPopupMenu( ghMenu,0,ptMenuPoint.x,26,0,hWnd,NULL );
gbMenuOn = TRUE ;
}
if( wp == 7 ) {
BOOL isConnect = getInternetStatus();
if( isConnect != lastConnect ) {
lastConnect = isConnect;
InvalidateRect( hWnd,&gItemTbl[ITEM_ID_CONN].rc,TRUE );
}
}
if( IsMute() != lastMute ) {
InvalidateRect( hWnd,&gItemTbl[ITEM_ID_LIST].rc,TRUE );
lastMute = IsMute();
}
break ;
case IDM_APP_POPUP:
{
if ( !gbMenuOn ) {
RECT rc ;
GetClientRect( hWnd,&rc );
giFocus = -1 ;
giFocusTask = -1 ;
// 2-25
//SetFocused( ITEM_ID_LIST,TRUE );
// show popup menu
RefreshMenuItems();
gbMenuOn = TRUE ;
TrackPopupMenu( ghMenu,0,rc.right,26,0,hWnd,NULL );
}
else {
gbMenuOn = FALSE ;
HWND hWndMnu = FindWindow( _T("MNU"),NULL );
if ( hWndMnu != NULL ) {
SendMessage( hWndMnu,WM_CLOSE,0,0 );
}
// 2-25
SetFocused( ITEM_ID_LIST,FALSE );
}
}
break ;
case WM_USER+500:
notifyWaiting = (wp == 1);
InvalidateRect( hWnd,&gItemTbl[ITEM_ID_NOTIFY].rc,TRUE );
break;
default:
if ( gnUpdateMsg == msg ) {
gbChecking = TRUE ;
RECT rc ;
Prepare( hWnd );
GetClientRect( hWnd,&rc );
InvalidateRect( hWnd,&rc,TRUE );
UpdateWindow( hWnd );
RefreshTask();
gbChecking = FALSE ;
}
else {
return( DefWindowProc(hWnd,msg,wp,lp) );
}
}
return( 0 );
}
/*
LRESULT CALLBACK HHTaskProc( HWND hWnd,UINT msg,WPARAM wp,LPARAM lp )
{
LRESULT res = CallWindowProc(HHoldProc, hWnd, msg, wp, lp);
// Check for a waiting notification
if( bNotify && (msg == WM_USER+8) ) {
HDC dc = GetWindowDC( hWnd );
BOOL avail = FALSE;
COLORREF clr = GetPixel( dc,143,0 );
for(int y = 0; y < 26; y ++)
for(int x = 143; x < 159; x ++) {
if( GetPixel( dc,x,y ) != clr ) {
avail = TRUE;
break;
}
}
ReleaseDC( hWnd,dc );
PostMessage( ghWnd,WM_USER+500,(avail ? 1 : 0),(long)clr );
notifyWaiting = !notifyWaiting;
PostMessage( ghWnd,WM_USER+500,(notifyWaiting ? 1 : 0),0 );
}
return res;
}
*/
/////////////////////////////////////////////////////////////////////////////
// command message handler
LRESULT OnCommand( HWND hWnd,WPARAM wp,LPARAM lp )
{
switch( LOWORD(wp) ) {
case IDM_APP_EXIT:
SendMessage( hWnd,WM_ACTIVATE,MAKEWPARAM(WA_INACTIVE,0),(LPARAM)hWnd );
SendMessage( hWnd,WM_CLOSE,0,0 );
break;
case IDM_APP_CLOSEALL:
CloseAllTask( FALSE,-1 );
RefreshTask();
break;
case IDM_APP_CLOSEBUT:
CloseAllTask( TRUE,-1 );
RefreshTask();
break;
case IDM_APP_NEXTAPPT:
PushAppt();
break ;
case IDM_APP_VOLUME:
ShowVolume();
break ;
case IDM_APP_SETTINGS:
{
// Use Create Process instead
PROCESS_INFORMATION pi;
TCHAR szPath[MAX_PATH];
GetModuleFileName( ghInst,szPath,sizeof(szPath) );
for ( int iIdx = lstrlen(szPath)-1 ; iIdx >= 0 ; iIdx-- ) {
if ( szPath[iIdx] == _T('\\') ) {
szPath[iIdx] = NULL ;
break ;
}
}
lstrcat( szPath,STR_SETUP_MODULE );
CreateProcess( szPath, NULL, NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi );
// Send update to window to speed up painting
UpdateWindow(GetForegroundWindow());
}
break ;
case IDM_APP_PROGRAM:
{
HWND hWndPro = FindWindow(_T("Explore"),NULL );
if ( hWndPro != NULL ) {
SetForegroundWindow( hWndPro );
}
}
break ;
default:
// switch tasks
if ( ((int)IDM_APP_BASE <= LOWORD(wp)) && (LOWORD(wp) < (int)(IDM_APP_BASE+gdwValidTask)) ) {
if ( (gptMenu.x >= gMenuClose) && !gAppTbl[LOWORD(wp)-IDM_APP_BASE].bSysTask ) {
// close selected task
CloseAllTask( FALSE,(int)LOWORD(wp)-IDM_APP_BASE );
RefreshTask();
}
else {
// switch task
SetForegroundWindow( gAppTbl[LOWORD(wp)-IDM_APP_BASE].hWnd );
SetFocus( gAppTbl[LOWORD(wp)-IDM_APP_BASE].hWnd );
}
}
return( DefWindowProc(hWnd,WM_COMMAND,wp,lp) );
}
return( 0 );
}
/////////////////////////////////////////////////////////////////////////////
// draw
void Draw( HWND hWnd )
{
PAINTSTRUCT ps ;
RECT rc,rcInt ;
HDC hDC ;
HBITMAP hPrevBGBmp ;
HWND hToday = FindWindow(_T("DesktopExplorerWindow"), NULL);
hDC = BeginPaint( hWnd,&ps );
GetClientRect( hWnd,&rc );
HDC hTmpDC = CreateCompatibleDC( hDC );
HBITMAP hPrevBmp = (HBITMAP)SelectObject( ghMemDC,ghBmpWork );
if ( gItemTbl[ITEM_ID_BG].hBmp ) {
// bkground(image file)
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[ITEM_ID_BG].hBmp );
BitBlt( ghMemDC,ps.rcPaint.left,ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
hTmpDC,
ps.rcPaint.left,ps.rcPaint.top
,SRCCOPY
);
SelectObject( hTmpDC,hPrevBGBmp );
}
else if ( bGradient ) {
if( b2002Style && (GetForegroundWindow() != hToday) ) {
Draw2002Style( hWnd,ps.rcPaint );
} else
BitBlt( ghMemDC,ps.rcPaint.left,ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
ghGradient,
ps.rcPaint.left,ps.rcPaint.top,
SRCCOPY );
//DrawGradient( hWnd );
}
else {
// fill bkground
FillRect( ghMemDC,&ps.rcPaint,GetSysColorBrush(COLOR_ACTIVECAPTION) );
}
for ( int iIdx = ITEM_ID_LOGO ; iIdx < ITEM_ID_MAX ; iIdx++ ) {
if ( gItemTbl[iIdx].bDisp && gItemTbl[iIdx].hBmp ) {
if ( IntersectRect(&rcInt,&ps.rcPaint,&gItemTbl[iIdx].rc) ) {
if ( (iIdx == ITEM_ID_CLOSE) && !gItemTbl[ITEM_ID_CLOSE].bEnable ) {
break ;
}
if ( (iIdx == ITEM_ID_LOGO) && (gdwDispItems & DISPITEM_SHIFTTITLE) ) {
continue ;
}
if( (iIdx == ITEM_ID_SYSTEM) && (gdwDispItems & DISPITEM_SYSTEM) )
DrawSystemState();
// Select the appropriate icon
if( (iIdx == ITEM_ID_CLOSE) && (giFocus == ITEM_ID_CLOSE) && gItemTbl[ITEM_ID_CLOSE2].bDisp )
//if ((iIdx == ITEM_ID_CLOSE) && (giFocus == ITEM_ID_CLOSE))
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[ITEM_ID_CLOSE2].hBmp );
else if( (iIdx == ITEM_ID_OK) && (giFocus == ITEM_ID_OK) && gItemTbl[ITEM_ID_OK2].bDisp )
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[ITEM_ID_OK2].hBmp );
else if( (iIdx == ITEM_ID_LIST) && (IsMute()) && (gItemTbl[ITEM_ID_MUTE].bDisp) ){
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[ITEM_ID_MUTE].hBmp );
}
else if( ((iIdx == ITEM_ID_CONN) || (iIdx == ITEM_ID_DISC)) && (gItemTbl[ITEM_ID_CONN].bDisp) ) {
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[(getInternetStatus() ? ITEM_ID_CONN : ITEM_ID_DISC)].hBmp );
}
else if( iIdx == ITEM_ID_NOTIFY ) {
if( notifyWaiting )
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[ITEM_ID_NOTIFY].hBmp );
else
continue;
}
else
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[iIdx].hBmp );
// Render the background portion
if( bGradient )
//DrawGradientRect( hWnd,gItemTbl[iIdx].rc );
BitBlt( ghMemDC,rcInt.left,rcInt.top,
rcInt.right - rcInt.left,
rcInt.bottom - rcInt.top,
ghGradient,rcInt.left,rcInt.top,SRCCOPY );
else if( gItemTbl[ITEM_ID_BG].hBmp ) {
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[ITEM_ID_BG].hBmp);
BitBlt( ghMemDC,rcInt.left,rcInt.top,
rcInt.right - rcInt.left,
rcInt.bottom - rcInt.top,
hTmpDC,rcInt.left,rcInt.top, SRCCOPY );
SelectObject( hTmpDC,hPrevBGBmp );
} else {
FillRect( ghMemDC,&rcInt,GetSysColorBrush(COLOR_ACTIVECAPTION) );
}
// Render the icon
TransparentBlit( ghMemDC,gItemTbl[iIdx].rc.left,gItemTbl[iIdx].rc.top,
gItemTbl[iIdx].rc.right - gItemTbl[iIdx].rc.left,
gItemTbl[iIdx].rc.bottom - gItemTbl[iIdx].rc.top,
hTmpDC,0,0 );
/*
if( !gItemTbl[ITEM_ID_BG].hBmp ) {
TransparentBlit( ghMemDC,gItemTbl[iIdx].rc.left,gItemTbl[iIdx].rc.top,
gItemTbl[iIdx].rc.right - gItemTbl[iIdx].rc.left,
gItemTbl[iIdx].rc.bottom - gItemTbl[iIdx].rc.top,
hTmpDC,0,0 );
} else if ( !bGradient ) {
BitBlt( ghMemDC,gItemTbl[iIdx].rc.left,gItemTbl[iIdx].rc.top,
gItemTbl[iIdx].rc.right - gItemTbl[iIdx].rc.left,
gItemTbl[iIdx].rc.bottom - gItemTbl[iIdx].rc.top,
hTmpDC,0,0,SRCCOPY );
} else {
DrawGradientRect( hWnd,gItemTbl[iIdx].rc );
TransparentBlit( ghMemDC,gItemTbl[iIdx].rc.left,gItemTbl[iIdx].rc.top,
gItemTbl[iIdx].rc.right - gItemTbl[iIdx].rc.left,
gItemTbl[iIdx].rc.bottom - gItemTbl[iIdx].rc.top,
hTmpDC,0,0 );
}
*/
SelectObject( hTmpDC,hPrevBGBmp );
if (( g3dbutton ) && (giFocus == iIdx))
DrawEdge( ghMemDC,&gItemTbl[iIdx].rc,BDR_SUNKENINNER,BF_RECT );
}
}
}
DeleteDC( hTmpDC );
// draw window title
DrawTitleArea( ps.rcPaint );
// system status
if ( gItemTbl[ITEM_ID_SYSTEM].bDisp ) {
if ( IntersectRect(&rcInt,&ps.rcPaint,&gItemTbl[ITEM_ID_SYSTEM].rc) ) {
hPrevBGBmp = (HBITMAP)SelectObject( hTmpDC,gItemTbl[ITEM_ID_SYSTEM].hBmp );
BitBlt( ghMemDC,gItemTbl[ITEM_ID_SYSTEM].rc.left,gItemTbl[ITEM_ID_SYSTEM].rc.top,
gItemTbl[ITEM_ID_SYSTEM].rc.right - gItemTbl[ITEM_ID_SYSTEM].rc.left,
gItemTbl[ITEM_ID_SYSTEM].rc.bottom - gItemTbl[ITEM_ID_SYSTEM].rc.top,
hTmpDC,0,0,SRCCOPY );
SelectObject( hTmpDC,hPrevBGBmp );
}
}
// date & time
DrawClock( ps.rcPaint );
// transfer to screen
BitBlt( hDC,ps.rcPaint.left,ps.rcPaint.top,
ps.rcPaint.right - ps.rcPaint.left,
ps.rcPaint.bottom - ps.rcPaint.top,
ghMemDC,
ps.rcPaint.left,ps.rcPaint.top,
SRCCOPY );
SelectObject( ghMemDC,hPrevBmp );
EndPaint( hWnd,&ps );
}
/////////////////////////////////////////////////////////////////////////////
// reload resources
BOOL LoadImgResource( HWND hWnd )
{
TCHAR szBuf[MAX_PATH+1];
LONG lRet ;
HKEY hKey ;
HBITMAP hBmp ;
DWORD dwType,dwSize,dwDispOpt ;
int iFontSize,iIDIndex ;
RECT rc ;
HDC hDC = GetDC( hWnd );
FONT_INFO_T fnt ;
ClearnupImgResource();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -