⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 defproc.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
📖 第 1 页 / 共 5 页
字号:
// 声明: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 + -