www.pudn.com > inet_stock.zip > TOOLBAR.C


#include 
#include 

#include "resource.h"
#include "appmain.h"
#include "global.h"
#include "toolbar.h"

typedef struct tag_BtnInfo{
	int bmpNO;
	UINT ID;
	int left, top;   
	BOOL enabled;
} BtnInfo; 

extern HWND ghWndToolBar, ghWndTips;

BtnInfo BtnInfos[]=
{
	{BTN_PLAY, IDM_GRAPH, 5, 2, TRUE},
	{BTN_PAUSE, IDM_JY, 5+BUTTON_WIDTH+1, 2, TRUE},
	{BTN_STOP, IDM_HQ_SZ, 5+2*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_NEXT, IDM_HQ_SH, 5+3*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_PREV, IDM_HQSEL_1, 5+4*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_RECORD, IDM_HQSEL_2, 5+5*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_SELE_3, IDM_HQSEL_3, 5+6*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_SELE_4, IDM_HQSEL_4, 5+7*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_SELE_5, IDM_HQSEL_5, 5+8*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_FX, IDM_FX, 5+9*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_NEWS,IDM_NEWS, 5+10*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_HELP,IDM_HELP, 5+11*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_SZDP,IDM_SZDP, 5+12*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_SHDP,IDM_SHDP, 5+13*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_GGXX,IDM_GGXX, 5+14*(BUTTON_WIDTH+1), 2, TRUE},
	{BTN_EXIT,IDM_EXIT, 5+15*(BUTTON_WIDTH+1), 2, TRUE}
};

//int TOOLBAR_HEIGHT =0;
WORD gState=0;
int count =0;
int CurSelBtn=-1, nMoveIn =-1, nTimes =-1;
RECT rcOld;             
POINT ptOld;
HBITMAP hBmpToolsUp=NULL,hBmpToolsDn=NULL,hBmpToolsDs=NULL;
LRESULT CALLBACK __export ToolsWndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK __export TipsWndProc(HWND, UINT, WPARAM, LPARAM);

int ShowTips(int nID);

#define CTOOLTIPS	"CTOOLTIPS"
#define CTOOLBAR	"CTOOLBAR"

BOOL RegisterToolBar(void)
{
	WNDCLASS wc;

	memset(&wc, 0, sizeof(wc));
	wc.lpfnWndProc =ToolsWndProc;
	wc.hInstance =ghInstance;
	wc.lpszClassName =CTOOLBAR; 
	wc.hbrBackground =GetStockObject(LTGRAY_BRUSH);
	wc.hCursor =LoadCursor(NULL, IDC_ARROW);

	if(!RegisterClass(&wc)) return FALSE;
	
	wc.style =CS_SAVEBITS;
	wc.lpfnWndProc =TipsWndProc;
	wc.lpszClassName =CTOOLTIPS;

	return RegisterClass(&wc);
}


HWND CreateToolBar(HWND hWnd)	
{
	int x, y;
	RECT rc;
	
    GetClientRect(ghWndMain, &rc);			
	x =GetSystemMetrics(SM_CXSCREEN);
	//y =GetSystemMetrics(SM_CYSCREEN)-GetSystemMetrics(SM_CYCAPTION);
	//x =rc.right -rc.left;
	y =rc.bottom -rc.top;	
	count =sizeof(BtnInfos)/sizeof(BtnInfo);
   
    if(ghWndToolBar==NULL)
    {
		ghWndToolBar =CreateWindow(CTOOLBAR, NULL,WS_CHILD|WS_CLIPSIBLINGS,//WS_POPUP,
					0, 
					STATUS_HEIGHT -2, 
					x, 
					BUTTON_HEIGHT+4,
					ghWndMain, NULL, ghInstance, NULL);
    }
	if(!ghWndToolBar) return NULL;
	
    if(ghWndTips==NULL)
    {
		ghWndTips =CreateWindow(CTOOLTIPS, CTOOLTIPS, WS_POPUP|WS_BORDER,
					2, 
					STATUS_HEIGHT-2 +GetSystemMetrics(SM_CYCAPTION),
					20, 
					20, 
					ghWndToolBar, NULL, ghInstance, NULL);
	}
	if(!ghWndTips) return NULL;
	SetWindowPos(ghWndToolBar, HWND_TOPMOST, 
			0, 
			STATUS_HEIGHT -2, 
			0, 
			0,
			SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER);
	
	return ghWndToolBar;
}

long CALLBACK __export ToolsWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ 
	HPEN hPen;
	RECT rc;
	POINT pt; 
	static HDC hDC =NULL;
	int i;
	HBITMAP hBmp;
	HDC hMemDC; 
	LONG ltmp; 
	WORD wState;
	PAINTSTRUCT ps;     
	
	switch(message)
	{
		case WM_CREATE: 
			hBmpToolsUp = LoadBitmap(ghInstance,MAKEINTRESOURCE(IDB_TOOLSUP));
			if(hBmpToolsUp == NULL)
			{
				ErrMsg(NULL, "error load resource BMP_TOOLSUP");
				DestroyWindow(hWnd);
				return -1;
			}

			hBmpToolsDn = LoadBitmap(ghInstance,MAKEINTRESOURCE(IDB_TOOLSDN));
			if(hBmpToolsDn == NULL)
			{
				ErrMsg(NULL, "error load resource BMP_TOOLSDN");
				DestroyWindow(hWnd);
				return -1;
			}

			hBmpToolsDs = LoadBitmap(ghInstance,MAKEINTRESOURCE(IDB_TOOLSDS));
			if(hBmpToolsDs == NULL)
			{
				ErrMsg(NULL, "error load resource BMP_TOOLSDS");
				DestroyWindow(hWnd);
				return -1;
			}
		break;

		case WM_DRAWBUTTON:
			hBmp = NULL;
			if(CurSelBtn<0)
			{ 
				if( hBmpToolsUp == NULL) return 0L;
				hMemDC = CreateCompatibleDC ((HDC)wParam);
				for(i=0;i=count) return 0L;
				switch(lParam)
				{
					case 0L:
						hBmp=hBmpToolsUp;
					break;
					case 1L: 
						hBmp=hBmpToolsDn;
					break;
					case 2L: 
						hBmp=hBmpToolsDs;
					break;
				}
				if(hBmp==NULL) return 0L;
				hDC=GetDC(hWnd);
				hMemDC = CreateCompatibleDC (hDC) ;
				SelectObject (hMemDC, hBmp) ;
				BitBlt (hDC, BtnInfos[CurSelBtn].left, BtnInfos[CurSelBtn].top, 
								BUTTON_WIDTH, BUTTON_HEIGHT,
				hMemDC,1+CurSelBtn*(BUTTON_WIDTH+1) , 1, SRCCOPY) ;
				DeleteDC (hMemDC) ; 
				ReleaseDC(hWnd,hDC);   
				hDC =NULL;
			}
		return 0;

		case WM_LBUTTONDOWN:
			pt=MAKEPOINT(lParam);
			KillTimer(hWnd, 1);   
			SendMessage(ghWndStatus, WM_USER+1, 0, 0L);
			//ReleaseCapture();
			if(IsWindowVisible(ghWndTips))
				ShowWindow(ghWndTips, SW_HIDE);   
			nMoveIn =-1;
				
			for(i=0;i5 || nMoveIn<0 || nMoveIn >=count)
			{
				KillTimer(hWnd, 1);
				SendMessage(ghWndStatus, WM_USER+1, 0, 0L);
				ShowWindow(ghWndTips, SW_HIDE);
				nTimes =5; 
				//nMoveIn =-1;
				break;
			}        
			GetCursorPos(&pt);
			GetWindowRect(hWnd, &rc);
			if(pt.x < rc.left+5 || pt.y < rc.top+5 ||
				pt.x >rc.right-5 || pt.y > rc.bottom-5)
			{
				KillTimer(hWnd, 1);
				SendMessage(ghWndStatus, WM_USER+1, 0, 0L);
				ShowWindow(ghWndTips, SW_HIDE);
				//nTimes =-1;  
				nMoveIn =-1;
			}	            
			if(nTimes ==0)
				ShowTips(nMoveIn);
		break;
		
		case WM_KEYDOWN:
			SetFocus(ghWndMain);
			SendMessage(ghWndMain, WM_KEYDOWN, wParam, lParam);
		break;
		
		case WM_SYSCOMMAND:
			if(wParam ==SC_KEYMENU)
			{
				SetFocus(ghWndMain);
				SendMessage(ghWndMain, WM_SYSCOMMAND, wParam, lParam);
				return 0L;
			}
		break;
		
		case WM_PAINT: 
			BeginPaint(hWnd,&ps); 
			SelectObject(ps.hdc,GetStockObject(NULL_BRUSH)); 
			hPen=CreatePen(PS_SOLID,1,RGB(80,80,80));
			SelectObject(ps.hdc,hPen);
			GetClientRect(hWnd,&rc);
			Rectangle(ps.hdc,0,0,rc.right,rc.bottom);
			SelectObject(ps.hdc,GetStockObject(WHITE_PEN));
			DeleteObject(hPen);
			MoveTo(ps.hdc,0,rc.bottom-1);
			LineTo(ps.hdc,0,0);
			LineTo(ps.hdc,rc.right-1,0);
			SelectObject(ps.hdc,GetStockObject(BLACK_PEN));
			for(i=0;i