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

📄 infobar.c

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 C
字号:
/*__________________________________________________________________________
 Copyright (C) 2002 PGP Corporation
 All rights reserved.
 
 $Id: Infobar.c,v 1.2 2002/08/06 20:10:10 dallen Exp $
__________________________________________________________________________*/

#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
#include "Infobar.h"

typedef struct _IB
{
	HWND hwndStatic;
	char szText[1024];
	BOOL bNormal;
	WNDPROC wpOrigProc;
	HBRUSH hBackBrush;
	HFONT hInfoFont;
	HICON hInfoIcon;
	HPEN hBorderPen;
} IB,*IBP;

COLORREF	kBlackColor			= RGB(0, 0, 0);
COLORREF	kPaleYellowColor	= RGB(255, 255, 204);

//	______________________________________
//
//  Static subclass procedure

LRESULT APIENTRY 
IBSubclassProc (
		HWND	hWnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	IBP					ibp;

	ibp=(IBP)GetWindowLong (hWnd, GWL_USERDATA);
	
	switch (uMsg) 
	{
		case WM_SETTEXT:
		{
			strcpy(ibp->szText,(char *)lParam);
			// SetText seems to get rid of our subclassed WM_PAINT,
			// so return FALSE
			InvalidateRect(hWnd,NULL,TRUE);
			return FALSE;
		}

		case WM_PAINT:
		{
			if(IsWindowVisible(hWnd))
			{
				HBRUSH hOldBackBrush;
				HFONT hOldInfoFont;
				HPEN hOldBorderPen;
				PAINTSTRUCT ps;
				HDC	hDC;
				RECT rc;
				COLORREF oldTextColor;
				COLORREF oldBkColor;
				
				GetWindowRect(hWnd,&rc);

				rc.right=rc.right-rc.left;
				rc.bottom=rc.bottom-rc.top;
				rc.top=rc.left=0;

				hDC = BeginPaint (hWnd, &ps);

				hOldInfoFont=SelectObject(hDC,ibp->hInfoFont);

				if(!ibp->bNormal)
				{				
					hOldBackBrush=SelectObject(hDC,ibp->hBackBrush);
					hOldBorderPen=SelectObject(hDC,ibp->hBorderPen);
					oldTextColor=SetTextColor(hDC,kBlackColor);
					oldBkColor=SetBkColor(hDC,kPaleYellowColor);

					Rectangle(hDC,rc.left,rc.top,rc.right,rc.bottom);
					DrawIcon(hDC, rc.left+1-8, rc.top+2-8 ,ibp->hInfoIcon);
				
					rc.left=rc.left+16;
					rc.right=rc.right-2;
					rc.top=rc.top+2;
					rc.bottom=rc.bottom-2;
				}
				else
				{
					oldBkColor=SetBkColor(hDC,GetSysColor(COLOR_BTNFACE));
				}

				ExtTextOut(hDC, rc.left, rc.top, 
					ETO_CLIPPED|ETO_OPAQUE,
					&rc, ibp->szText, lstrlen(ibp->szText), NULL);

				if(!ibp->bNormal)
				{				
					SelectObject(hDC,hOldBackBrush);
					SelectObject(hDC,hOldBorderPen);
				    SetTextColor(hDC,oldTextColor);
				}

				SetBkColor(hDC,oldBkColor);
				SelectObject(hDC,hOldInfoFont);
		
				EndPaint (hWnd, &ps);
			}
			return 0;
		}
	}
    return CallWindowProc (ibp->wpOrigProc, 
		hWnd, uMsg, wParam, lParam); 
} 

VOID
IBInit(HWND hwndStatic,HICON hInfoIcon,BOOL bNormal)
{
	IBP ibp;
	LOGFONT lf;

	ibp=malloc(sizeof(IB));
	memset(ibp,0x00,sizeof(IB));
	ibp->hwndStatic=hwndStatic;

	SetWindowLong(hwndStatic,GWL_USERDATA,(LONG)ibp);

	ibp->hBackBrush=CreateSolidBrush(kPaleYellowColor);
	ibp->hBorderPen=CreatePen(PS_SOLID, 0, GetSysColor (COLOR_3DSHADOW));
	ibp->hInfoIcon=hInfoIcon;

    SystemParametersInfo (SPI_GETICONTITLELOGFONT, 
		sizeof(LOGFONT), &lf, 0);

    ibp->hInfoFont=CreateFontIndirect (&lf);

	ibp->bNormal=bNormal;

	GetWindowText(hwndStatic,ibp->szText,1024);

	ibp->wpOrigProc = (WNDPROC) 
		SetWindowLong(hwndStatic,GWL_WNDPROC,(LONG)IBSubclassProc);
}

VOID 
IBSetHighlightMode(HWND hwndStatic,BOOL bNormal)
{
	IBP ibp;

	ibp=(IBP)GetWindowLong (hwndStatic, GWL_USERDATA);

	ibp->bNormal=bNormal;
	InvalidateRect(hwndStatic,NULL,TRUE);
}

VOID 
IBDestroy(HWND hwndStatic)
{
	IBP ibp;

//	MessageBox(NULL,"DESTROYING","MYSELF",MB_OK);

	ibp=(IBP)GetWindowLong (hwndStatic, GWL_USERDATA);

	if(ibp!=0)
	{
		DeleteObject(ibp->hBackBrush);
		DeleteObject(ibp->hBorderPen);
		DeleteObject(ibp->hInfoFont);

		SetWindowLong(hwndStatic,GWL_WNDPROC,(LONG)ibp->wpOrigProc);
		SetWindowLong(hwndStatic,GWL_USERDATA,(LONG)0);

		memset(ibp,0x00,sizeof(IB));
		free(ibp);
	}
}

/*__Editor_settings____

	Local Variables:
	tab-width: 4
	End:
	vi: ts=4 sw=4
	vim: si
_____________________*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -