📄 button.c
字号:
/******************************************************************************** Copyright 2006 National ASIC Center, All right Reserved** FILE NAME: Button.c* PROGRAMMER: ming.c* Date of Creation: 2006/08/8** DESCRIPTION:** NOTE:** FUNCTIONS LIST:* -----------------------------------------------------------------------------** -----------------------------------------------------------------------------* * MODIFICATION HISTORY* LastModify 2006/10/30******************************************************************************/#include "mingui.h"
//---------------------------------------------------------------------------void Button_Repaint(HWND hWnd){ char *BtnCaption;
HDC dc=BeginPaint(hWnd);
int clientWidth=crWidth(hWnd),clientHeight=crHeight(hWnd);
/*画位图*/ if(WNDPTR(hWnd)->Logo) { int x,y; if( WNDPTR(hWnd)->Logo->Width < clientWidth ) { x = ( (clientWidth - WNDPTR(hWnd)->Logo->Width)>>1 ); } else x=0; if( WNDPTR(hWnd)->Logo->Height < clientHeight ) { y = ( (clientHeight - WNDPTR(hWnd)->Logo->Height)>>1 ); } else y=0; DrawBitmap(dc,x,y,WNDPTR(hWnd)->Logo); } /*画标题*/
BtnCaption=GetWindowText(hWnd); if(BtnCaption && *BtnCaption) { SetPenLogic(dc,PL_REPLACE); if(WndGetAttr(hWnd,WS_DISABLED)) { SetColor(dc,CL_WHITE); DrawText(dc,1,1,clientWidth,clientHeight,BtnCaption,alCenter|alMiddle); SetColor(dc,CL_DARKGRAY); DrawText(dc,0,0,clientWidth,clientHeight,BtnCaption,alCenter|alMiddle); } else { DrawText(dc,0,0,clientWidth,clientHeight,BtnCaption,alCenter|alMiddle); } } if(WndGetAttr(hWnd,WS_FOCUS)) { /*画焦点状态按钮内虚线框*/ if(!WNDPTR(hWnd)->Logo && !WndGetAttr(hWnd,BS_MENU)) { SetPenLogic(dc,PL_XOR); SetColor(dc,CL_SOLID); DrawDashedRect(dc,3,3,clientWidth-6,clientHeight-6); } /*画焦点状态按钮反白显示*/ if(WndGetAttr(hWnd,BS_MENU)) { SetPenLogic(dc,PL_XOR); SetColor(dc,CL_SOLID); FillRect(dc,0,0,clientWidth,clientHeight); } }
EndPaint(hWnd);}//---------------------------------------------------------------------------static HRESULT CALLBACK DefButtonProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){ switch(message) { case WM_LBUTTONDOWN: WndAddAttr(hWnd,BS_PUSHED); InvalidateNCArea(hWnd);
CMD_NotifyParent(hWnd,BN_PUSHED); break;/*DefWindowProc will deal with focus change events*/
case WM_LBUTTONUP: WndSubAttr(hWnd,BS_PUSHED); InvalidateNCArea(hWnd);
CMD_NotifyParent(hWnd,BN_UNPUSHED); break;/*DefWindowProc will dispatch BN_CLICKED events*/
case WM_KEYUP:
if(wParam==VK_RETURN && WndGetAttr(hWnd,WS_FOCUS))
{ CMD_NotifyParent(hWnd,BN_CLICKED);
}
return 0;
case WM_PAINT:
Button_Repaint(hWnd);
return 0;
case WM_KILLFOCUS: case WM_SETFOCUS: InvalidateWindow(hWnd,true); return 0;
case WM_ENABLE: Invalidate(hWnd); return 0;
case WM_SETTEXT: if(SaveWindowText(hWnd,(char *)lParam)) { Invalidate(hWnd);
} return 0;
case WM_SETLOGO: WNDPTR(hWnd)->Logo=(TBitmap *)lParam; Invalidate(hWnd); return 0;
case WM_NCCALCSIZE: if(WndGetAttr(hWnd,WS_BORDER) && lParam) { InflateRect((TRECT *)lParam, -2, -2);
} return 0;
case WM_NCPAINT: if(WndGetAttr(hWnd,WS_BORDER)) { HDC dc=GetDC(hWnd); DrawFrame(dc,0,0,absWidth(hWnd),absHeight(hWnd),WndGetAttr(hWnd,WS_FOCUS),WndGetAttr(hWnd,BS_PUSHED));
ReleaseDC(dc); } return 0; } return DefWindowProc(hWnd,message,wParam,lParam);}//---------------------------------------------------------------------------void CM_RegisterButton(void){ TWNDCLASS wc; memset(&wc,0,sizeof(wc)); wc.clForeground=CL_BTNTEXT; wc.clBackground=CL_BTNFACE; wc.lpfnWndProc=DefButtonProc; wc.lpszClassName="button"; RegisterClass(&wc);}/*---------------------------------------------------------------------------END --- Thank you! ming.c---------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -