📄 winproc.c
字号:
/******************************************************************************** Copyright 2006 National ASIC Center, All right Reserved** FILE NAME: winform.c* PROGRAMMER: ming.c* Date of Creation: 2006/08/8** DESCRIPTION:** NOTE:** FUNCTIONS LIST:* -----------------------------------------------------------------------------** -----------------------------------------------------------------------------** MODIFICATION HISTORY* LastModify 2006/10/30******************************************************************************/#include "mingui.h"
//---------------------------------------------------------------------------HRESULT CALLBACK DefWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam){ switch(message) { case WM_KEYDOWN: { switch(wParam) { case VK_LEFT: case VK_UP: { HWND hw=CM_GetPrevTabStop(hWnd); if(hw)SetFocus(hw); } break; case VK_RIGHT: case VK_DOWN: case VK_TAB: { HWND hw=CM_GetNextTabStop(hWnd); if(hw)SetFocus(hw); } break; } } break;
case WM_KEYUP:
if(wParam==VK_RETURN && hWnd==(HWND)g_CurrentFocus)
{ CMD_NotifyParent(hWnd,CM_ENTER);
}
break;
case WM_LBUTTONDOWN: if(hWnd!=(HWND)g_CurrentFocus) { SetFocus(hWnd); }
if(WndGetAttr(hWnd,WS_VSCROLL|WS_BORDER)==(WS_VSCROLL|WS_BORDER))
{ extern void ScrollBar_MouseDown(HWND,LPARAM);
ScrollBar_MouseDown(hWnd,lParam);
} break;
case WM_LBUTTONUP:
if(WNDPTR(hWnd)->Parent && hWnd==(HWND)g_CurrentFocus) { int mx=LOWORD(lParam),my=HIWORD(lParam); if(PointInRect(mx, my, &WNDPTR(hWnd)->WndRect)) CMD_NotifyParent(hWnd,CM_CLICKED); }
if(WndGetAttr(hWnd,WS_VSCROLL|WS_BORDER)==(WS_VSCROLL|WS_BORDER))
{ extern void ScrollBar_MouseUp(HWND);
ScrollBar_MouseUp(hWnd);
}
break;
case WM_MOUSEMOVE:
if(WndGetAttr(hWnd,WS_VSCROLL|WS_BORDER)==(WS_VSCROLL|WS_BORDER))
{ extern void ScrollBar_MouseMove(HWND,LPARAM);
ScrollBar_MouseMove(hWnd,lParam);
}
break;
case WM_TIMER:
if(wParam && ((TGUITimer *)wParam)->TimerProc)
{ ((TGUITimer *)wParam)->TimerProc(hWnd);
}
break;
case WM_SETTEXT: if(WndGetAttr(hWnd,WS_CAPTION|WS_NCPAINT)==WS_CAPTION)
{ extern HWND GetCaptionBar(HWND);
SendMessage(GetCaptionBar(hWnd),WM_SETTEXT,wParam,lParam);
}
else
{ SaveWindowText(hWnd,(char *)lParam);
}
break;
case WM_SETLOGO: if(WndGetAttr(hWnd,WS_CAPTION|WS_NCPAINT)==WS_CAPTION)
{ extern HWND GetCaptionBar(HWND);
SendMessage(GetCaptionBar(hWnd),WM_SETLOGO,wParam,lParam);
}
else
{ WNDPTR(hWnd)->Logo=(TBitmap *)lParam;
} break;
case WM_NCCALCSIZE: /* calculate client rect*/ { DWORD dwStyle=WNDPTR(hWnd)->Style; TRECT *prc=(TRECT *)lParam; if( (dwStyle&WS_CAPTION)==WS_CAPTION) { InflateRect(prc, -DLG_BORDER_SIZE, -DLG_BORDER_SIZE);
CreateWindow("CaptionBar",NULL,0,0,0,crWidth(hWnd),CAPTION_BAR_HEIGHT,hWnd,0,0); prc->top += CAPTION_BAR_HEIGHT;
} else { int dwBorderStyle=dwStyle&(WS_BORDER_RAISED|WS_BORDER_LOWERED);
if(dwBorderStyle==0)
{ InflateRect(prc, -1, -1);
}
else if(dwBorderStyle!=(WS_BORDER_RAISED|WS_BORDER_LOWERED))
{ InflateRect(prc, -2, -2);
}
}
if(dwStyle&WS_VSCROLL)
{ extern void ScrollBar_CalcuSize(HWND,TRECT *);
ScrollBar_CalcuSize(hWnd,prc);
}
} break;
case WM_NCPAINT: /* repaint border area*/ { DWORD dwStyle=WNDPTR(hWnd)->Style;
HDC dc=GetDC(hWnd); if( (dwStyle&WS_CAPTION)==WS_CAPTION) { extern HWND GetCaptionBar(HWND);
Draw3dOutset(dc,0,0,absWidth(hWnd),absHeight(hWnd)); SetColor(dc,CL_BTNFACE); DrawRect(dc,2,2,absWidth(hWnd)-4,absHeight(hWnd)-4); Invalidate(GetCaptionBar(hWnd));
} else { switch( dwStyle&(WS_BORDER_RAISED|WS_BORDER_LOWERED))
{ case WS_BORDER_RAISED: Draw3dOutset(dc, 0, 0,absWidth(hWnd),absHeight(hWnd));break;
case WS_BORDER_LOWERED: Draw3dInset(dc, 0, 0,absWidth(hWnd),absHeight(hWnd));break;
case 0: SetColor(dc,CL_BLACK); DrawRect(dc,0,0,absWidth(hWnd),absHeight(hWnd));break;
}
}
if(dwStyle&WS_VSCROLL)
{ extern void ScrollBar_Repaint(HWND,HDC);
ScrollBar_Repaint(hWnd,dc);
}
ReleaseDC(dc); } break;
case WM_ERASEBKGND: /* repaint background of client area*/
if(wParam && lParam)
{ HDC dc=(HDC)wParam;
TRECT *prc=(TRECT *)lParam;
ClearRect(dc,prc->left,prc->top,prc->right-prc->left,prc->bottom-prc->top);
}
break;
case WM_PAINT: /* repaint foreground of client area*/
{ BeginPaint(hWnd);
EndPaint(hWnd);
}
break;
case WM_EXPOSE:
{ extern void ReexposeTopWnd(HWND);
ReexposeTopWnd(hWnd);
}
break;
case WM_CLOSE: DestroyWindow(hWnd); break; } return 0;}/*---------------------------------------------------------------------------END --- Thank you! ming.c---------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -