Example #1
0
// 清除指定名字的子控件
BOOL CControlBase::RemoveControl(CString strControlName, UINT uControlID)
{
	vector<CControlBase*>::iterator it;
	for(it=m_vecControl.begin();it!=m_vecControl.end();++it)
	{
		CControlBase* pControlBase = *it;
		if (pControlBase && pControlBase->IsThisObject(uControlID, strControlName))
		{
			// 如果是焦点控件,则需要先将焦点设置为空
			if(IsFocusControl())
			{
				CDlgBase* pDlg = GetParentDialog(FALSE);
				if(pDlg)
				{
					pDlg->SetFocusControlPtr(NULL);
				}
			}
			m_vecControl.erase(it);
			delete pControlBase;
			return TRUE;
		}
	}

	return FALSE;
}
Example #2
0
// 清除指定的子控件
BOOL CControlBase::RemoveControl(CControlBase* pControl)
{
	vector<CControlBase*>::iterator it;
	for(it=m_vecControl.begin();it!=m_vecControl.end();++it)
	{
		CControlBase* pControlBase = *it;
		if (pControlBase == pControl)
		{
			// 如果是焦点控件,则需要先将焦点设置为空
			if(IsFocusControl())
			{
				CDlgBase* pDlg = GetParentDialog(FALSE);
				if(pDlg)
				{
					pDlg->SetFocusControlPtr(NULL);
				}
			}
			m_vecControl.erase(it);
			delete pControlBase;
			return TRUE;
		}
	}

	return FALSE;
}
Example #3
0
// 键盘事件处理
BOOL CDuiComboBox::OnControlKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// 如果当前处于焦点状态,用下箭头可以下拉列表
	if(m_bDown && (nChar == VK_DOWN) && (nFlags == 0) && IsFocusControl())
	{
		// 模拟鼠标点击
		SendMessage(m_uID, BUTTOM, BUTTOM_DOWN);
		return true;
	}

	return false;
}
Example #4
0
// 键盘事件处理
BOOL CDuiWkeView::OnControlKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// 如果当前处于焦点状态,则处理回车键和ESC键
	if(IsFocusControl() && ((nChar == VK_RETURN) || (nChar == VK_ESCAPE)) && (nFlags == 0) && m_pWebView)
	{
		//m_pWebView->keyDown(nChar, nFlags, false);
		m_pWebView->keyPress(nChar, nFlags, false);
		m_render.render(m_pWebView);
		return true;
	}

	return false;
}
Example #5
0
// 释放控件
void CDuiWkeView::ReleaseControl()
{
	// 如果是焦点控件,则将当前焦点控件设置为空
	if(IsFocusControl())
	{
		SetCurrentFocusControl(NULL);
	}
	// 删除宿主窗口
	if(m_hwndHost && ::IsWindow(m_hwndHost))
	{
		DestroyWindow(m_hwndHost);
	}
    m_hwndHost = NULL;
}
Example #6
0
LRESULT CDuiNativeWnd::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
{
    if((m_hwndHost == NULL) || !::IsWindow(m_hwndHost))
	{
		return 0;
	}

    if( !GetRresponse() && uMsg >= WM_MOUSEFIRST && uMsg <= WM_MOUSELAST )
	{
		return 0;
	}

    bool bWasHandled = true;
    if( (uMsg >= WM_MOUSEFIRST && uMsg <= WM_MOUSELAST) || uMsg == WM_SETCURSOR )
	{
        // Mouse message only go when captured or inside rect
        DWORD dwHitResult = HITRESULT_HIT;
        if( dwHitResult != HITRESULT_HIT ) return 0;
        if( uMsg == WM_SETCURSOR ) bWasHandled = false;
    }else
	if( uMsg >= WM_KEYFIRST && uMsg <= WM_KEYLAST )
	{
        // Keyboard messages just go when we have focus
        if( !IsFocusControl() ) return 0;
    }else
	{
        switch( uMsg )
		{
        case WM_HELP:
        case WM_CONTEXTMENU:
            bWasHandled = false;
            break;
        default:
            return 0;
        }
    }
    LRESULT lResult = 0;
    return lResult;
}
Example #7
0
// 处理WM_KEYDOWN消息
LRESULT CDuiWkeView::OnWmKeyDown(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	bool handled = true;
	unsigned int virtualKeyCode = wParam;
    unsigned int flags = 0;
	bool bShiftState = false;
    if (HIWORD(lParam) & KF_REPEAT)
        flags |= WKE_REPEAT;
    if (HIWORD(lParam) & KF_EXTENDED)
        flags |= WKE_EXTENDED;
	if((GetKeyState(VK_SHIFT) & 0x8000) || (VK_SHIFT == wParam))
		bShiftState = true;
	HKL hKL = GetKeyboardLayout(0);
	int i = LOWORD(hKL);
	TCHAR buffer[255];   
	memset(buffer,0,255 * sizeof(TCHAR));  
	if( (i == 0x0804) && (ImmIsIME(hKL)) )
	{
		ImmGetDescription(hKL,buffer,255);
		if(buffer[0] != NULL)
		{
			if(( wParam & 0x80 )  |  (wParam >= 0x70  && wParam <= 0x7F  ))
			{
				if( !IsFocusControl() ) return 0;
			}	
		}
	}	
	if(wParam >= 0x70  && wParam <= 0x7F  )
	{
		handled = m_pWebView->keyDown(virtualKeyCode, flags, false);
		m_render.render(m_pWebView);
		if( wParam == 0x74 )
		{
			MSG msg;
			msg.hwnd = hWnd;
			msg.message = WM_CHAR;
			msg.wParam = virtualKeyCode;
			msg.lParam = lParam;
			::TranslateMessage(&msg);
			::DispatchMessage(&msg);			 
		}
		if( !IsFocusControl() ) return 0;
	}

    handled = m_pWebView->keyDown(virtualKeyCode, flags, false);
	m_render.render(m_pWebView);
	
	if(!bShiftState)
	{
		if( !GetKeyState(VK_CAPITAL)  )
		{
			if((wParam >= 'A') && (wParam <= 'Z'))
				virtualKeyCode = tolower(wParam);
		}
		if(wParam != VK_SHIFT)
		{
			if( wParam > 0x80 )
				return 0;
		}
	}else
	{	
		if(wParam != VK_SHIFT)
		{
			//wParam = wParam & 0x7F;//`~
			//virtualKeyCode = wParam;
			if(wParam == '1' || wParam == '3' || wParam == '4' || wParam == '5' )
				virtualKeyCode = wParam - 0x10;
			else if(wParam == '2')
				virtualKeyCode = '@';
			else if(wParam == '6')
				virtualKeyCode = '^';
			else if(wParam == '7')
				virtualKeyCode = '&';
			else if( wParam == '8')
				virtualKeyCode = '*' ;
			else if( wParam == '9')
				virtualKeyCode = '(';
			else if(wParam == '0')
				virtualKeyCode = ')';
			else if(wParam == 45)
				virtualKeyCode = '_';
			else if(wParam == '=')
				virtualKeyCode = '+';
			else if(wParam == '[')
				virtualKeyCode = '{';
			else if(wParam == ']')
				virtualKeyCode = '}';
			else if(wParam == ';')
				virtualKeyCode = ':';
			else if(wParam == '\'')
				virtualKeyCode = '"';
			else if(wParam == '\\')
				virtualKeyCode = '|';
			else if(wParam == ',')
				virtualKeyCode = '<';
			else if(wParam == '.')
				virtualKeyCode = '>';
			else if(wParam == '/')
				virtualKeyCode = '?';
			else if(wParam == '`')
				virtualKeyCode = '~';
			else if(wParam > 0x80)
				return 0;
		}
	}	
	MSG msg;
	msg.hwnd = hWnd;
	msg.message = WM_CHAR;
	msg.wParam = virtualKeyCode;
	msg.lParam = lParam;
	::TranslateMessage(&msg);
	::DispatchMessage(&msg);

	return 0;
}