📄 static.c
字号:
}
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 + -