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

📄 static.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 2 页
字号:
		}
		break;
//	case IMAGE_CURSOR:
	case IMAGE_ICON:
		if( dwStyle & SS_ICON )	// 映象类型与窗口风格是否一致 ?
		{	// 是
			return SetImage( hwnd, dwStyle, hImage );
		}
		break;
	}
	return NULL;	// 
}

// **************************************************
// 声明:static LRESULT GetImage( HWND hwnd, UINT uiType )
// 参数:
//	IN hwnd - 窗口句柄
//	IN uiType - 图形对象的类型
// 返回值:
//	假如成功,返回当前的图形句柄;否则,返回NULL
// 功能描述:
//	得到控件显示映象
// 引用: 
//	
// ************************************************

static LRESULT GetImage( HWND hwnd, UINT uiType )
{
    return (LRESULT)((PSTATIC_ATTRIB)GetWindowLong( hwnd, 0 ))->hImage;
}

// **************************************************
// 声明:static LRESULT DoGetImage( HWND hwnd, UINT uiType )
// 参数:
//	IN hwnd - 窗口句柄
//	IN uiType - 图形对象的类型
// 返回值:
//	假如成功,返回当前的图形句柄;否则,返回NULL
// 功能描述:
//	得到控件显示映象,处理 STM_GETICON 和 STM_GETIMAGE 消息
// 引用: 
//	
// ************************************************
static LRESULT DoGetImage( HWND hwnd, UINT uiType )
{    
	DWORD dwStyle;

	dwStyle = GetWindowLong( hwnd, GWL_STYLE );// 得到窗口风格
	switch( uiType )
	{
	case IMAGE_BITMAP:
		if( dwStyle & SS_BITMAP )// 映象类型与窗口风格是否一致 ?
		{
			return GetImage( hwnd, uiType );
		}
		break;
//	case IMAGE_CURSOR:
	case IMAGE_ICON:
		if( dwStyle & SS_ICON )	// 映象类型与窗口风格是否一致 ?
		{
			return GetImage( hwnd, uiType );
		}
		break;
	}
	return NULL;
}

// **************************************************
// 声明:static void DoPAINT( HWND hwnd )
// 参数:
//	IN hwnd - 窗口句柄
// 返回值:
//	无
// 功能描述:
//	绘制客户区,处理 WM_PAINT 消息
// 引用: 
//	
// ************************************************
static void DoPAINT( HWND hwnd )
{
	HDC hdc;
	PAINTSTRUCT ps;

	hdc = BeginPaint( hwnd, &ps );	// 得到绘制DC
	DoDraw( hwnd, hdc, GetWindowLong( hwnd, GWL_STYLE ) );
	EndPaint( hwnd, &ps );	// 释放DC
}

// **************************************************
// 声明:static void DoEraseBkground( HWND hWnd, HDC hdc, DWORD dwStyle )
// 参数:
//	IN hWnd - 窗口句柄
//	IN hdc - DC句柄
// 返回值:
//	无
// 功能描述:
//	绘制客户区背景
// 引用: 
//	
// ************************************************
static void DoEraseBkground( HWND hWnd, HDC hdc, DWORD dwStyle  )
{
	RECT rcClient;
	PSTATIC_ATTRIB psa = (PSTATIC_ATTRIB)GetWindowLong( hWnd, 0 );
	//DWORD dwStyle = GetWindowLong( hWnd, GWL_STYLE );
	
	GetClientRect( hWnd, &rcClient );
	//FillRect( (HDC)wParam, &rcClient, GetSysColorBrush(COLOR_STATIC) );
	if( dwStyle & WS_DISABLED )
		FillSolidRect( hdc, &rcClient, psa->cl_DisableBk );
	else
		FillSolidRect( hdc, &rcClient, psa->cl_TextBk );
}

// **************************************************
// 声明:static void RedrawWindow( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	无
// 功能描述:
//	重新绘制客户区
// 引用: 
//	
// ************************************************

static void RedrawWindow( HWND hWnd )
{
	HDC hdc = GetDC( hWnd );
	DWORD dwStyle = GetWindowLong( hWnd, GWL_STYLE );
	DoEraseBkground( hWnd, hdc, dwStyle );
	DoDraw( hWnd, hdc, dwStyle );
	ReleaseDC( hWnd, hdc );
}

// **************************************************
// 声明:static LRESULT DoSetCtlColor( HWND hWnd, LPCTLCOLORSTRUCT lpccs )
// 参数:
//	IN hWnd - 窗口句柄
//	IN lpccs - 控件结构,包含颜色值
// 返回值:
//	成功,返回TRUE; 否则,返回FALSE
// 功能描述:
//	设置控件颜色,处理 WM_SETCTLCOLOR 消息
// 引用: 
//	
// ************************************************
static LRESULT DoSetCtlColor( HWND hWnd, LPCTLCOLORSTRUCT lpccs )
{
	if( lpccs )
	{
		PSTATIC_ATTRIB pAttrib = (PSTATIC_ATTRIB)GetWindowLong( hWnd, 0 );

		if( lpccs->fMask & CLF_TEXTCOLOR )
		{
			pAttrib->cl_Text = lpccs->cl_Text;	// 有效文本颜色
		}
		if( lpccs->fMask & CLF_TEXTBKCOLOR )
		{
			pAttrib->cl_TextBk = lpccs->cl_TextBk;	// 有效文本背景颜色
		}
		if( lpccs->fMask & CLF_DISABLECOLOR )
			pAttrib->cl_Disable = lpccs->cl_Disable;	// 无效文本颜色 
		if( lpccs->fMask & CLF_DISABLEBKCOLOR )
			pAttrib->cl_DisableBk = lpccs->cl_DisableBk;	// 无效文本背景颜色
		return TRUE;
	}
	return FALSE;
}

// **************************************************
// 声明:static LRESULT DoGetCtlColor( HWND hWnd, LPCTLCOLORSTRUCT lpccs )
// 参数:
//	IN hWnd - 窗口句柄
//	IN lpccs - 控件结构,包含颜色值
// 返回值:
//	成功,返回TRUE; 否则,返回FALSE
// 功能描述:
//	得到控件颜色,处理 WM_GETCTLCOLOR 消息
// 引用: 
//	
// ************************************************

static LRESULT DoGetCtlColor( HWND hWnd, LPCTLCOLORSTRUCT lpccs )
{
	if( lpccs )
	{
		PSTATIC_ATTRIB pAttrib = (PSTATIC_ATTRIB)GetWindowLong( hWnd, 0 );

		if( lpccs->fMask & CLF_TEXTCOLOR )	// 有效文本颜色
			lpccs->cl_Text = pAttrib->cl_Text;
		if( lpccs->fMask & CLF_TEXTBKCOLOR )	// 有效文本背景颜色
			lpccs->cl_TextBk = pAttrib->cl_TextBk;
		if( lpccs->fMask & CLF_DISABLECOLOR )	// 无效文本颜色
			lpccs->cl_Disable = pAttrib->cl_Disable;
		if( lpccs->fMask & CLF_DISABLEBKCOLOR )	// 无效文本背景颜色
			 lpccs->cl_DisableBk = pAttrib->cl_DisableBk;
		return TRUE;
	}
	return FALSE;	
}

// **************************************************
// 声明:static LRESULT DoSysColorChange( HWND hWnd )
// 参数:
// 	IN hWnd - 窗口句柄
// 返回值:
//	返回 0
// 功能描述:
//	处理系统颜色改变
// 引用: 
// ************************************************

static LRESULT DoSysColorChange( HWND hWnd )
{
    PSTATIC_ATTRIB pAttrib = (PSTATIC_ATTRIB)GetWindowLong( hWnd, 0 );

	_SetStaticColor( pAttrib );
	return 0;
}

// **************************************************
// 声明:static VOID _SetStaticColor( PSTATIC_ATTRIB pAttrib )
// 参数:
//	IN pAttrib - 静态类数据结构
// 返回值:
//	无
// 功能描述:
//	设置窗口显示颜色
// 引用: 
//	
// ************************************************

static VOID _SetStaticColor( PSTATIC_ATTRIB pAttrib )
{
	pAttrib->cl_Text = GetSysColor( COLOR_STATICTEXT );
	pAttrib->cl_TextBk = GetSysColor( COLOR_STATIC );
	pAttrib->cl_Disable = GetSysColor( COLOR_GRAYTEXT );
	pAttrib->cl_DisableBk = pAttrib->cl_TextBk;
}

// **************************************************
// 声明:static LRESULT DoCreate( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	成功,返回0; 否则,返回-1
// 功能描述:
//	初始化窗口数据。处理 WM_CREATE 消息
// 引用: 
//	
// ************************************************
static LRESULT DoCreate( HWND hWnd )
{	// 分配控件私有结构
	PSTATIC_ATTRIB pAttrib = malloc( sizeof(STATIC_ATTRIB) );
	if( pAttrib )
	{
		memset( pAttrib, 0, sizeof(STATIC_ATTRIB) );
		_SetStaticColor( pAttrib );
		//pAttrib->cl_Text = GetSysColor( COLOR_STATICTEXT );
		//pAttrib->cl_TextBk = GetSysColor( COLOR_STATIC );
		//pAttrib->cl_Disable = GetSysColor( COLOR_GRAYTEXT );
		//pAttrib->cl_DisableBk = pAttrib->cl_TextBk;
		SetWindowLong( hWnd, 0, (LONG)pAttrib );
		return 0;  // 成功
	}
	return -1;  // 失败
}

// **************************************************
// 声明:static LRESULT DoDestroy( HWND hWnd )
// 参数:
//	IN hWnd - 窗口句柄
// 返回值:
//	返回0
// 功能描述:
//	破坏窗口数据。处理 WM_DESTROY 消息
// 引用: 
//	
// ************************************************
static LRESULT DoDestroy( HWND hWnd )
{	// 释放控件私有结构(之前在 DoCreate 里创建)
	PSTATIC_ATTRIB pAttrib = (PSTATIC_ATTRIB)GetWindowLong( hWnd, 0 );
	free( pAttrib );
	return 0;
}

// **************************************************
// 声明:LRESULT WINAPI StaticWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
// 参数:
//  IN hWnd - 窗口句柄
//	IN message - 消息
//	IN wParam - 第一个消息
//	IN lParam - 第二个消息
// 返回值:
//	依赖于具体的消息
// 功能描述:
//	按钮窗口处理总入口
// 引用: 
//	
// ************************************************

LRESULT CALLBACK StaticWndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch( uMsg )
	{
	case WM_PAINT:			// 绘制客户区消息
		DoPAINT( hwnd );
		return 0;
    case WM_LBUTTONDOWN:			// 左鼠标按下消息
        return DoLButtonDown( hwnd );//, LOWORD( lParam ), HIWORD( lParam ) );
    case WM_ENABLE:
        return DoEnable( hwnd, (BOOL)wParam );
	case STM_SETICON:	
        return DoSetImage( hwnd, IMAGE_ICON, (HANDLE)wParam );
	case STM_SETIMAGE:
        return DoSetImage( hwnd, wParam, (HANDLE)lParam );
	case STM_GETICON:
		return DoGetImage( hwnd, IMAGE_ICON );
	case STM_GETIMAGE:
		return DoGetImage( hwnd, wParam );
    case WM_SETTEXT:
        DefWindowProc( hwnd, uMsg, wParam, lParam );
        //InvalidateRect( hwnd, 0, TRUE );  // 无效客户区,重绘
		RedrawWindow( hwnd );
        return 0;
	case WM_ERASEBKGND:		// 清除客户区背景
		{			
			DoEraseBkground( hwnd, (HDC)wParam, GetWindowLong( hwnd, GWL_STYLE ) );
		}
		return 1;
    case WM_SETCTLCOLOR:
		return DoSetCtlColor( hwnd, (LPCTLCOLORSTRUCT)lParam );
    case WM_GETCTLCOLOR:
		return DoGetCtlColor( hwnd, (LPCTLCOLORSTRUCT)lParam );
	case WM_SYSCOLORCHANGE:
		return DoSysColorChange( hwnd );
	case WM_CREATE:
		return DoCreate( hwnd );
	case WM_DESTROY:
		return DoDestroy( hwnd );
	default:
	// It's important to do this
	// if your do'nt handle message, you must call DefWindowProc
	// 重要提示:假如你不需要处理消息,将该消息交由系统窗口默认处理函数去处理
	// 
    	return DefWindowProc( hwnd, uMsg, wParam, lParam );	// 系统默认处理
	}
	return 0;
}

⌨️ 快捷键说明

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