📄 defproc.c
字号:
}
}
return TRUE;
}
return FALSE;
}
// **************************************************
// 声明:
// 参数:
// 无
// 返回值:
// 假入成功,返回TRUE;否则,返回FALSE
// 功能描述:
//
// 引用:
//
// ************************************************
#define CAPSTATE 0x00000001
#define CAPDOWN 0x00000002
#define SHIFTDOWN 0x00000004
#define TOUPPER( w ) (w-32)
BOOL WINAPI Msg_Translate( const MSG FAR * lpMsg )
{
static WORD wKeyboardState=0;
BOOL bDown ;
if ( lpMsg->message == WM_KEYDOWN )
bDown = TRUE;
else
bDown = FALSE;
if( lpMsg->message == WM_KEYDOWN )
{
WPARAM wParam;
wParam = lpMsg->wParam;
{
//extern void SetKeyState( WPARAM, BOOL );
SetKeyState( wParam ,bDown );
}
if( ( (DWORD)lpMsg->lParam & 0x80000000 ) == 0 )
{
wParam = MapVirtualKey( wParam, 2 );
if( wParam != -1 )
{
PostMessage( lpMsg->hwnd, WM_CHAR, wParam, 0 );
}
}
}
else if( lpMsg->message == WM_KEYUP )
{
SetKeyState(lpMsg->wParam ,bDown );
}
return FALSE;
}
/**************************************************
声明:static int DoScrollMove( HWND hWnd, LONG hitTest, int x, int y )
参数:
IN hWnd - 窗口句柄
IN hitTest - 选中的滚动条类型,为以下值:
SC_HSCROLL - 水平滚动条
SC_VSCROLL - 垂直滚动条
IN x - 在滚动条的鼠标x位置(屏幕坐标)
IN y - 在滚动条的鼠标y位置(屏幕坐标)
返回值:
返回 0
功能描述:
当鼠标在滚动条按下时,会调到该函数。该函数会调用
滚动条处理函数Scrl_DoLBUTTONDOWN
引用:
内部使用
************************************************/
static int DoScrollMove( HWND hWnd, LONG hitTest, int x, int y )
{
RECT rect;
// 将hitTest转化为Scrl_DoLBUTTONDOWN能识别的值
if( hitTest == SC_HSCROLL )
hitTest = SB_HORZ;
else
hitTest = SB_VERT;
// 将x,y转化为相对于窗口的坐标
GetWindowRect( hWnd, &rect );
x -= rect.left;
y -= rect.top;
//
return (int)Scrl_DoLBUTTONDOWN( hWnd, (int)hitTest, x, y );
}
/**************************************************
声明:static int DoFrameMove( HWND hWnd, int x, int y )
参数:
IN hWnd - 窗口句柄
IN x - 在滚动条的鼠标x位置(屏幕坐标)
IN y - 在滚动条的鼠标y位置(屏幕坐标)
返回值:
返回0
功能描述:
处理WM_SYSCOMMAND - SC_MOVE消息
实现窗口的移动
引用:
内部使用
************************************************/
static int DoFrameMove( HWND hWnd, int x, int y )
{
HWND hParent;
DWORD dwStyle;
POINT pt;
RECT rect;
dwStyle = GetWindowLong( hWnd, GWL_STYLE );
// 得到该窗口的窗口矩形(屏幕坐标)
GetWindowRect( hWnd, &rect );
if( dwStyle & WS_CHILD )
{ //如果是子窗口,将该窗口矩形由屏幕坐标转化为其父窗口坐标
hParent = GetParent( hWnd );
ScreenToClient( hParent, (LPPOINT)&rect );
ScreenToClient( hParent, ( (LPPOINT)&rect+1 ) );
}
else
hParent = 0;
pt.x = x;
pt.y = y;
// 这里进入鼠标拖动处理过程
if( TrackWindowRect( hWnd, pt, hParent, &rect ) )
{ // 鼠标释放(抬笔),将hWnd移到新的位置
SetWindowPos( hWnd, 0, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE );
// 立即更新窗口内容
UpdateWindow( hWnd );
}
return 0;
}
/**************************************************
声明:static BOOL GetInterFrame( LPRECT lprect, DWORD dwMainStyle )
参数:
IN/OUT lprect - 输入窗口矩形坐标,并用该指针接收除边框之外的内矩形坐标
IN dwMainStyle - 窗口风格
返回值:
假如成功,返回TRUE;否则,返回FALSE
功能描述:
由窗口矩形得到除边框之外的内矩形
引用:
************************************************/
static BOOL GetInterFrame( LPRECT lprect, DWORD dwMainStyle )
{
SIZE size;
// 得到除边框之外的内矩形的宽度和高度
if( _GetFrameSize( &size, dwMainStyle ) )
{ // 转换为屏幕坐标
lprect->left += size.cx;
lprect->top += size.cy;
lprect->right -= size.cx;
lprect->bottom -= size.cy;
}
else
return FALSE;
return TRUE;
}
/**************************************************
声明:static BOOL GetCaptionSysBoxRect( LPRECT lprect, DWORD dwMainStyle )
参数:
IN/OUT lprect - 输入除边框之外的内矩形,并用该指针接收标题栏上的
系统方框矩形坐标
IN dwMainStyle - 窗口风格
返回值:
假如成功,返回TRUE;否则,返回FALSE
功能描述:
得到标题栏上的系统方框矩形坐标
引用:
************************************************/
static BOOL GetCaptionSysBoxRect( LPRECT lprect, DWORD dwMainStyle )
{
lprect->right = lprect->left + GetSystemMetrics( SM_CXSIZE );
lprect->bottom = lprect->top + GetSystemMetrics( SM_CYSIZE );
return TRUE;
}
/**************************************************
声明:static BOOL GetCaptionTextBoxRect( LPRECT lprect, DWORD dwMainStyle, DWORD dwExStyle )
参数:
IN/OUT lprect - 输入除边框之外的内矩形,并用该指针接收标题栏上的
文本方框矩形坐标
IN dwMainStyle - 窗口风格
返回值:
假如成功,返回TRUE;否则,返回FALSE
功能描述:
得到标题栏上的文本方框矩形坐标
引用:
************************************************/
static BOOL GetCaptionTextBoxRect( LPRECT lprect, DWORD dwMainStyle, DWORD dwExStyle )
{
int cx = GetSystemMetrics( SM_CXSIZE );
//如果有系统方框,去掉它
if( dwMainStyle & WS_SYSMENU )
lprect->left += cx;
//如果有关闭方框,去掉它
if( dwExStyle & WS_EX_CLOSEBOX )
{
lprect->right -= cx;
}
//如果有确定方框,去掉它
if( dwExStyle & WS_EX_OKBOX )
{
lprect->right -= cx;
}
//如果有帮助方框,去掉它
if( dwExStyle & WS_EX_HELPBOX )
{
lprect->right -= cx;
}
return TRUE;
}
/**************************************************
声明:static BOOL GetCaptionRect( LPRECT lprect, DWORD dwMainStyle )
参数:
IN/OUT lprect - 输入除边框之外的内矩形,并用该指针接收标题栏方框矩形坐标
IN dwMainStyle - 窗口风格
返回值:
假如成功,返回TRUE;否则,返回FALSE
功能描述:
得到标题栏方框矩形坐标
引用:
************************************************/
static BOOL GetCaptionRect( LPRECT lprect, DWORD dwMainStyle )
{
SIZE size;
_GetFrameSize( &size, dwMainStyle );
lprect->left += size.cx;
lprect->top += size.cy;
lprect->right -= size.cx;
lprect->bottom = lprect->top + GetSystemMetrics( SM_CYCAPTION );
return TRUE;
}
/**************************************************
声明:static BOOL GetCaptionHelpBoxRect( LPRECT lprect, DWORD dwExStyle )
参数:
IN/OUT lprect - 输入除边框之外的内矩形,并用该指针接收标题栏的帮助方框矩形坐标
IN dwMainStyle - 窗口风格
返回值:
假如成功,返回TRUE;否则,返回FALSE
功能描述:
得到标题栏帮助方框矩形坐标
引用:
************************************************/
static BOOL GetCaptionHelpBoxRect( LPRECT lprect, DWORD dwExStyle )
{
lprect->bottom = lprect->top + GetSystemMetrics( SM_CYSIZE );
if( dwExStyle & WS_EX_CLOSEBOX )
{ // has close box
lprect->right -= GetSystemMetrics( SM_CXSIZE );
}
if( dwExStyle & WS_EX_OKBOX )
lprect->right -= GetSystemMetrics( SM_CXSIZE );
lprect->left = lprect->right - GetSystemMetrics( SM_CXSIZE );
return TRUE;
}
/**************************************************
声明:static BOOL GetCaptionOkBoxRect( LPRECT lprect, DWORD dwExStyle )
参数:
IN/OUT lprect - 输入除边框之外的内矩形,并用该指针接收标题栏的确定方框矩形坐标
IN dwMainStyle - 窗口风格
返回值:
假如成功,返回TRUE;否则,返回FALSE
功能描述:
得到标题栏确定方框矩形坐标
引用:
************************************************/
static BOOL GetCaptionOkBoxRect( LPRECT lprect, DWORD dwExStyle )
{
lprect->bottom = lprect->top + GetSystemMetrics( SM_CYSIZE );
if( dwExStyle & WS_EX_CLOSEBOX )
{ // has close box
lprect->right -= GetSystemMetrics( SM_CXSIZE );
}
lprect->left = lprect->right - GetSystemMetrics( SM_CXSIZE );
return TRUE;
}
/**************************************************
声明:static BOOL GetCaptionCloseBoxRect( LPRECT lprect, DWORD dwExStyle )
参数:
IN/OUT lprect - 输入除边框之外的内矩形,并用该指针接收标题栏的关闭方框矩形坐标
IN dwMainStyle - 窗口风格
返回值:
假如成功,返回TRUE;否则,返回FALSE
功能描述:
得到标题栏关闭方框矩形坐标
引用:
************************************************/
static BOOL GetCaptionCloseBoxRect( LPRECT lprect, DWORD dwExStyle )
{
lprect->bottom = lprect->top + GetSystemMetrics( SM_CYSIZE );
lprect->left = lprect->right - GetSystemMetrics( SM_CXSIZE );
return TRUE;
}
/**************************************************
声明:static LRESULT DoPaint( HWND hWnd )
参数:
IN hWnd - 窗口句柄
返回值:
假如成功,返回0;
功能描述:
处理WM_PAINT消息
引用:
************************************************/
static LRESULT DoPaint( HWND hWnd )
{
PAINTSTRUCT ps;
BeginPaint( hWnd, &ps );
EndPaint( hWnd, &ps );
return 0;
}
/**************************************************
声明:static LRESULT DoErasebkgnd( HWND hWnd, HDC hdc )
参数:
IN hWnd - 窗口句柄
IN hdc - 绘图DC
返回值:
假如擦出了背景,返回1;否则返回0
功能描述:
处理WM_ERASEBACKGROUND消息
引用:
************************************************/
static LRESULT DoErasebkgnd( HWND hWnd, HDC hdc )
{
HBRUSH hBrush = (HBRUSH)GetClassLong( hWnd, GCL_HBRBACKGROUND );
RECT rect;
if( hBrush )
{
GetClientRect( hWnd, &rect );
FillRect( hdc, &rect, hBrush );
return (LRESULT)1;
}
return (LRESULT)0;
}
/**************************************************
声明:static LRESULT DoErasebkgnd( HWND hWnd )
参数:
IN hWnd - 窗口句柄
返回值:
返回0
功能描述:
处理WM_DESTROY消息
引用:
************************************************/
static LRESULT DoDestroy( HWND hWnd )
{
return 0;
}
static LRESULT DoNcDestroy( HWND hWnd )
{
DWORD dwStyle = (DWORD)GetWindowLong( hWnd, GWL_STYLE );//GetWindowLong( hWnd, GWL_VSCROLL );
LPSTR lpWinText = (LPSTR)SetWindowLong( hWnd, GWL_TEXT_PTR, 0 );
if( dwStyle & WS_VSCROLL )
{
_ReleaseWindowScrollBar( hWnd, SB_VERT );
}
if( dwStyle & WS_HSCROLL )
{
_ReleaseWindowScrollBar( hWnd, SB_HORZ );
}
if( lpWinText )
{
// RETAILMSG( 1, ( "free window text(%x).\r\n", lpWinText ) );
FreeStr( lpWinText );
}
return 0;
}
static LRESULT DoNcCreate( HWND hWnd, LPARAM lParam )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -