Ejemplo n.º 1
0
//----设置焦点窗口---------------------------------------------------------------
//描述: 略.
//参数:hwnd: 新的焦点窗口
//返回:旧的焦点窗口.
//------------------------------------------------------------------------------
HWND	SetFocusWindow(HWND hwnd)
{
	HWND wnd=NULL;

	if(GDD_Lock())
	{
		wnd =HWND_Focus;
		HWND_Focus =hwnd;
		GDD_Unlock();
	}
	else
	{
		return NULL;
	}

	if(wnd!=NULL)
	{
		SendMessage(wnd,MSG_KILLFOCUS,0,0);
	}
	if(hwnd!=NULL)
	{
		SendMessage(hwnd,MSG_SETFOCUS,0,0);
	}

	return wnd;

}
Ejemplo n.º 2
0
//----销毁一个窗口--------------------------------------------------------------
//描述: 可以是主窗口和子窗口,除了删除自身窗口结构,还将发送WSG_DESTROY消息给父窗口.
//参数:hwnd:需要销毁的窗口句柄
//返回:无.
//------------------------------------------------------------------------------
void    DestroyWindow(HWND hwnd)
{
	if(IsFocusWindow(hwnd))
	{
		SetFocusWindow(NULL);
	}

    UpdateDisplay();

    GDD_Lock();
    if(HWND_Lock(hwnd))
    {
        _DestroyChildWindow(hwnd);

        SendMessage(hwnd,MSG_DESTROY,0,0);
        if(hwnd->Style&WS_CHILD)
        {
            _DeleteChildWindowData(hwnd);
        }

        HWND_Unlock(hwnd);

    }
    GDD_Unlock();

}
Ejemplo n.º 3
0
//----获得焦点窗口---------------------------------------------------------------
//描述: 略.
//参数:无.
//返回:焦点窗口.
//------------------------------------------------------------------------------
HWND	GetFocusWindow(void)
{
	HWND wnd=NULL;

	if(GDD_Lock())
	{
		wnd =HWND_Focus;
		GDD_Unlock();
	}
	return wnd;
}
Ejemplo n.º 4
0
//----锁定窗口------------------------------------------------------------------
//描述: 锁定窗口,用于对窗口互斥操作,该函数返回TRUE时,必须调用HWND_Unlock解锁;
//      而当该函数返回FALSE,则无需调用HWND_Unlock.
//参数:hwnd:窗口句柄
//返回:成功:TRUE; 失败:FLASE;
//------------------------------------------------------------------------------
BOOL    HWND_Lock(HWND hwnd)
{
    GDD_Lock();
    if(NULL!=hwnd)
    if(WIN_TAG==hwnd->Tag)
    {
        //Lock_MutexPend(hwnd->mutex_lock,5000000);
        //GDD_Unlock();
        return TRUE;
    }
    GDD_Unlock();
    return  FALSE;
}
Ejemplo n.º 5
0
//----判断是否为焦点窗口---------------------------------------------------------
//描述: 略.
//参数:无.
//返回:如果指定的窗口是焦点窗口,将返回TRUE,否则返回FALSE.
//------------------------------------------------------------------------------
BOOL	IsFocusWindow(HWND hwnd)
{
	BOOL res=FALSE;

	if(HWND_Lock(hwnd))
	{
		if(GDD_Lock())
		{
			if(hwnd == HWND_Focus)
			{
				res=TRUE;
			}
			GDD_Unlock();
		}
		HWND_Unlock(hwnd);
	}
	return res;

}
Ejemplo n.º 6
0
void    MouseInput(s32 x,s32 y,u32 key_state)
{
    HWND hwnd;
    POINT pt;
    RECT rc;

    pt.x =x;
    pt.y =y;

    GDD_Lock();
    hwnd =GetWindowFromPoint(&pt); //记录LButtonDown窗口.

    // LBUTTON
    if(key_state&MK_LBUTTON)
    {
        if(!_IsKeyDown(VK_LBUTTON))
        {
            _SetKeyDown(VK_LBUTTON);

            HWND_LButton_Down =hwnd;    //记录LButtonDown窗口.
            GetClientRectToScreen(hwnd,&rc);
            if(_PtInRect(&rc,&pt))
            {
                LButton_Msg =MSG_LBUTTON_DOWN;
                _ScreenToClient(hwnd,&pt,1);    //客户区使用客户坐标.
            }
            else
            {
                LButton_Msg =MSG_NCLBUTTON_DOWN;
            }

            PostMessage(hwnd,LButton_Msg,0,(pt.y<<16)|(pt.x));
        }
    }
    else
    {
        if(_IsKeyDown(VK_LBUTTON))
        {
            _SetKeyUp(VK_LBUTTON);
            hwnd =HWND_LButton_Down;
            if(LButton_Msg==MSG_LBUTTON_DOWN)
            {
                _ScreenToClient(hwnd,&pt,1);    //客户区使用客户坐标.
                LButton_Msg =MSG_LBUTTON_UP;
            }
            else
            {
                LButton_Msg =MSG_NCLBUTTON_UP;
            }
            PostMessage(hwnd,LButton_Msg,0,(pt.y<<16)|(pt.x));
        }
    }



    if((cursor_x!=x) || (cursor_y!=y))
    {
        cursor_x =x;
        cursor_y =y;
        pt.x =x;
        pt.y =y;
        ScreenToClient(hwnd,&pt,1);
        PostMessage(hwnd,MSG_MOUSE_MOVE,key_state,(pt.y<<16)|(pt.x));
    }

    GDD_Unlock();
}
Ejemplo n.º 7
0
//----解锁窗口------------------------------------------------------------------
//描述: 当窗口锁定成功后,由该函数进行解锁操作.
//参数:hwnd:窗口句柄
//返回:无
//------------------------------------------------------------------------------
void    HWND_Unlock(HWND hwnd)
{
    GDD_Unlock();
    //Lock_MutexPost(hwnd->mutex_lock);
}