⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 WinCE下绝好的工具条软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:

	// 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 + -