📄 defproc.c
字号:
// 声明:static LRESULT DoMouseActivate( HWND hWnd,
// HWND hTopLevel,
// WORD wHitValue,
// WORD wMouse )
// 参数:
// IN hWnd - 窗口句柄
// IN hTopLevel - 顶级窗口
// IN wHitValue - 当前鼠标点中的窗口位置
// IN wMouse - 鼠标状态
// 返回值:
// 功能描述:
// 处理 WM_MOUSEACTIVATE 消息
// 引用:
// ************************************************
static LRESULT DoMouseActivate( HWND hWnd, HWND hTopLevel, WORD wHitValue, WORD wMouse )
{
HWND hwndTemp;
if( hTopLevel == hWnd &&
wMouse == WM_LBUTTONDOWN )
return MA_ACTIVATE; // 如果自己就是顶级窗口, 激活它
else
{
hwndTemp = GetParent( hWnd ); // 该窗口有父窗口吗?
if( hwndTemp ) // 有,则给父窗口发该消息
return SendMessage( hwndTemp, WM_MOUSEACTIVATE, (WPARAM)hTopLevel, MAKELONG( wHitValue, wMouse ) );
}
return MA_ACTIVATE;
}
// **************************************************
// 声明:static LRESULT DoNcLButtonDown( HWND hWnd, WORD wHitValue, LPARAM lParam )
// 参数:
// IN hWnd - 窗口句柄
// IN wHitValue - 当前鼠标点中的窗口位置
// IN lParam - x, y 坐标
// 返回值:
// 0
// 功能描述:
// 处理 WM_NCLBUTTONDOWN 消息
// 引用:
// ************************************************/
static LRESULT DoNcLButtonDown( HWND hWnd, WORD wHitValue, LPARAM lParam )
{
// the code is remove to message.c 's HandlePosEvent, 2001.09.30
//if( GetActiveWindow() != GetTopLevelParent( hWnd ) )
//SetForegroundWindow( GetTopLevelParent( hWnd ) );//, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE );
if( wHitValue == HTCAPTION )
{
if( !( GetWindowLong( hWnd, GWL_EXSTYLE ) & WS_EX_NOMOVE) )
SendMessage( hWnd, WM_SYSCOMMAND, SC_MOVE, lParam );
}
else if( wHitValue == HTVSCROLL )
SendMessage( hWnd, WM_SYSCOMMAND, SC_VSCROLL, lParam );
else if( wHitValue == HTHSCROLL )
SendMessage( hWnd, WM_SYSCOMMAND, SC_HSCROLL, lParam );
return 0;
}
// **************************************************
// 声明:static LRESULT DoNcLButtonUp( HWND hWnd, WORD wHitValue, LPARAM lParam )
// 参数:
// IN hWnd - 窗口句柄
// IN wHitValue - 当前鼠标点中的窗口位置
// IN lParam - x, y 坐标
// 返回值:
// 0
// 功能描述:
// 处理 WM_NCLBUTTONUP 消息
// 引用:
// ************************************************
static LRESULT DoNcLButtonUp( HWND hWnd, WORD wHitValue, LPARAM lParam )
{
if( wHitValue == HTCLOSEBOX )
SendMessage( hWnd, WM_SYSCOMMAND, SC_CLOSE, lParam );
else if( wHitValue == HTOKBOX )
SendMessage( hWnd, WM_SYSCOMMAND, SC_OK, lParam );
else if( wHitValue == HTHELPBOX )
SendMessage( hWnd, WM_SYSCOMMAND, SC_CONTEXTHELP, lParam );
return 0;
}
// **************************************************
// 声明:static LRESULT DoClose( HWND hWnd )
// 参数:
// IN hWnd - 窗口句柄
// 返回值:
// 0
// 功能描述:
// 处理 WM_CLOSE 消息
// 引用:
//
// ************************************************
static LRESULT DoClose( HWND hWnd )
{
DestroyWindow( hWnd );
return 0;
}
// **************************************************
// 声明:static LRESULT DoTimer( HWND hWnd, UINT uID, TIMERPROC lpTimerProc )
// 参数:
// IN hWnd - 窗口句柄
// IN uID - 定时器ID
// IN lpTimerProc - 定时器回调函数
// 返回值:
// 0
// 功能描述:
// 处理 WM_TIMER 消息
// 引用:
// ************************************************
static LRESULT DoTimer( HWND hWnd, UINT uID, TIMERPROC lpTimerProc )
{
if( lpTimerProc )
{
/*
_LPWINDATA lpws;
lpws = _GetHWNDPtr( hWnd );
if( lpws )
{
CALLBACKDATA cd;
// 准备回调参数
cd.hProcess = lpws->lpClass->hOwnerProcess;
cd.lpfn = (FARPROC)lpTimerProc;
cd.dwArg0 = (DWORD)hWnd;
// 回调
Sys_ImplementCallBack4( &cd, WM_TIMER, uID, GetTickCount() );
}
*/
lpTimerProc( hWnd, WM_TIMER, uID, GetTickCount() );
}
return 0;
}
// **************************************************
// 声明:static LRESULT DoSysTimer( HWND hWnd, UINT uID, TIMERPROC lpTimerProc )
// 参数:
// IN hWnd - 窗口句柄
// IN uID - 定时器ID
// IN lpTimerProc - 定时器回调函数
// 返回值:
// 0
// 功能描述:
// 处理 WM_SYSTIMER 消息
// 引用:
// ************************************************
static LRESULT DoSysTimer( HWND hWnd, UINT uID, TIMERPROC lpTimerProc )
{
if( lpTimerProc )
{
/*
_LPWINDATA lpws;
lpws = _GetHWNDPtr( hWnd );
if( lpws )
{
CALLBACKDATA cd;
// 准备回调参数
cd.hProcess = lpws->lpClass->hOwnerProcess;
cd.lpfn = (FARPROC)lpTimerProc;
cd.dwArg0 = (DWORD)hWnd;
// 回调
Sys_ImplementCallBack4( &cd, WM_SYSTIMER, uID, GetTickCount() );
}
*/
lpTimerProc( hWnd, WM_SYSTIMER, uID, GetTickCount() );
}
return 0;
}
// **************************************************
// 声明:static LRESULT DoSetIcon( HWND hWnd, UINT fIconType, HICON hNewIcon )
// 参数:
// IN hWnd - 窗口句柄
// IN fIconType - 图标类型
// ICON_SMALL - 小图标
// IN hNewIcon - 图标句柄
// 返回值:
// 老的图标句柄
// 功能描述:
// 处理 WM_SETICON 设置窗口的系统图标
// 引用:
// ************************************************
static LRESULT DoSetIcon( HWND hWnd, UINT fIconType, HICON hNewIcon )
{
HICON hRetv = NULL;
// if( hNewIcon && _GetHICONPtr(hNewIcon) == NULL )
//return NULL;
if( fIconType == ICON_SMALL )
{
/*
_LPWINDATA lpws;
lpws = _GetHWNDPtr( hWnd );
if( lpws )
{
hRetv = lpws->hSmallIcon;
lpws->hSmallIcon = hNewIcon;
}
*/
hRetv = (HICON)SetWindowLong( hWnd, GWL_HICONSM, (LONG)hNewIcon );
}
return (LRESULT)hRetv;
}
// **************************************************
// 声明:static LRESULT DoGetIcon( HWND hWnd, UINT fIconType )
// 参数:
// IN hWnd - 窗口句柄
// IN fIconType - 图标类型
// ICON_SMALL - 小图标
// 返回值:
// 图标句柄
// 功能描述:
// 处理 WM_GETICON 消息,得到当前的图标句柄
// 引用:
// ************************************************
static LRESULT DoGetIcon( HWND hWnd, UINT fIconType )
{
HICON hRetv = NULL;
if( fIconType == ICON_SMALL )
{
/*
_LPWINDATA lpws;
lpws = _GetHWNDPtr( hWnd );
if( lpws )
hRetv = lpws->hSmallIcon;
*/
hRetv = (HICON)GetWindowLong( hWnd, GWL_HICONSM );
}
return (LRESULT)hRetv;
}
// **************************************************
// 声明:static BOOL CALLBACK EnumChildProc( HWND hwnd, LPARAM lParam )
// 参数:
// IN hWnd - 窗口句柄
// IN lParam - LPARAM 参数,这里是代表消息类型
// 返回值:
// 返回 TRUE,继续枚举; FALSE,停止枚举
// 功能描述:
// 枚举子窗口
// 引用:
// ************************************************
static BOOL CALLBACK EnumChildProc( HWND hWnd, LPARAM lParam )
{
//RETAILMSG( 1, ( "ec++:0x%x.\r\n", lParam ) );
SendMessage( hWnd, (UINT)lParam, 0, 0 );
//RETAILMSG( 1, ( "ec--.\r\n" ) );
return TRUE;
}
// **************************************************
// 声明:static LRESULT DoSysColorChange( HWND hWnd )
// 参数:
// IN hWnd - 窗口句柄
// 返回值:
// 返回 0
// 功能描述:
// 处理系统颜色改变
// 引用:
// ************************************************
static LRESULT DoSysColorChange( HWND hWnd )
{
DWORD dwStyle = GetWindowLong( hWnd, GWL_STYLE );
if( (dwStyle & WS_CHILD) == 0 )
{ //顶层窗口
//通知所有的子窗口,系统颜色改变
//RETAILMSG( 1, ( "ds++:.\r\n" ) );
EnumChildWindows( hWnd, EnumChildProc, (LPARAM)WM_SYSCOLORCHANGE );
//RETAILMSG( 1, ( "ds--:.\r\n" ) );
}
return 0;
}
// **************************************************
// 声明:LRESULT WINAPI Win_DefProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
// 参数:
// IN hWnd - 窗口句柄
// IN Msg - 消息
// IN wParam - 第一个消息
// IN lParam - 第二个消息
// 返回值:
// 依赖于具体的消息
// 功能描述:
// 默认的窗口消息处理程序
// 引用:
// ************************************************
LRESULT WINAPI Wnd_DefProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
// RETAILMSG( 1, ( ( "def:arg0=%x,arg1=%x,arg2=%x,arg3=%x\r\n" ), hWnd, Msg, wParam, lParam ) );
switch( Msg )
{
case WM_SETCURSOR:
if( LOWORD( lParam ) == 0xfffe && HIWORD( lParam ) == WM_LBUTTONDOWN )
{
//SetForegroundWindow( GetTopLevelParent( hWnd ) );
//SetWindowPos( hWnd, HWND_TOP, 0, 0, 0, 0,SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE);
//SetForegroundWindow( hWnd );
}
return 0;
case WM_NCHITTEST:
return DoNcHitTest( hWnd, wParam, lParam );
case WM_NCLBUTTONDOWN:
return DoNcLButtonDown( hWnd, (WORD)wParam, lParam );
case WM_NCLBUTTONUP:
return DoNcLButtonUp( hWnd, (WORD)wParam, lParam );
case WM_MOUSEACTIVATE:
return DoMouseActivate( hWnd, (HWND)wParam, LOWORD( lParam ), HIWORD( lParam ) );
case WM_ACTIVATE:
return DoActivate( hWnd, LOWORD( wParam ), HIWORD( wParam ) );
case WM_NCACTIVATE:
return DoNcActivate( hWnd, (BOOL)wParam );
case WM_NCPAINT:
return DoNcPaint( hWnd, wParam, lParam, FALSE );
case WM_GETTEXT:
return CopyText( hWnd, (LPSTR)lParam, (int)wParam );
case WM_GETTEXTLENGTH:
return GetTextLength( hWnd );
case WM_SETTEXT:
return SetText( hWnd, (LPCSTR)lParam );//SetWindowLong( hWnd, GWL_TEXT_PTR, (LPCSTR)lParam );//_Win_SetText( hWnd, (LPCSTR)lParam );
case WM_SYSCOMMAND:
return DoSysCommand( hWnd, wParam, lParam );
case WM_PAINT:
return DoPaint( hWnd );
case WM_ERASEBKGND:
return DoErasebkgnd( hWnd, (HDC)wParam );
case WM_WINDOWPOSCHANGING:
// send WM_GETMINMAXINFO
break;
case WM_WINDOWPOSCHANGED:
// send WM_MOVE
// send WM_SIZE
break;
case WM_STYLECHANGED:
//SetWindowPos( hWnd, NULL, 0, 0, 0, 0,
// SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER |SWP_NOACTIVATE | SWP_FRAMECHANGED );
return 0;
case WM_NCCALCSIZE:
return DoNcCalcSize( hWnd, wParam, lParam );
case WM_SHOWWINDOW:
if( wParam )
SetWindowPos( hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW );
else
SetWindowPos( hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_HIDEWINDOW );
break;
case WM_SYSSETFOREGROUND:
SetForegroundWindow( hWnd );
break;
case WM_VKEYTOITEM: // use by list-box
case WM_CHARTOITEM:
return -1;
case WM_ACTIVATEAPP:
if( wParam == FALSE )
{
DoNcActivate( GetActiveWindow(), wParam );
}
break;
case WM_TIMER:
return DoTimer( hWnd, (UINT)wParam, (TIMERPROC)lParam );
case WM_SYSTIMER:
return DoSysTimer( hWnd, (UINT)wParam, (TIMERPROC)lParam );
case WM_CLOSE:
DoClose( hWnd );
break;
case WM_SETICON:
return DoSetIcon( hWnd, (UINT)wParam, (HICON)lParam );
case WM_GETICON:
return DoGetIcon( hWnd, (UINT)wParam );
case WM_SYSCOLORCHANGE:
return DoSysColorChange( hWnd );
case WM_POWERBROADCAST:
return TRUE;
case WM_CREATE:
return 0;
case WM_DESTROY:
return DoDestroy( hWnd );
case WM_NCCREATE:
return DoNcCreate( hWnd, lParam );
//return TRUE;
case WM_NCDESTROY:
return DoNcDestroy( hWnd );
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -