Ejemplo n.º 1
0
void UIIMEdit::_ImEditPaste()
{
	BOOL bHadPic = FALSE;
	if (::OpenClipboard(::GetDesktopWindow()))
	{
		if (IsClipboardFormatAvailable(CF_BITMAP))
		{
			HBITMAP hBitmap = (HBITMAP)::GetClipboardData(CF_BITMAP);
			BITMAP bitmap;
			GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bitmap);
			SIZE bitmapSize = { bitmap.bmWidth, bitmap.bmHeight };
			if (hBitmap)
			{
				_SaveFile(hBitmap, m_strImagePath);
				InsertImage(m_strImagePath.GetBuffer(), bitmapSize, FALSE);
				bHadPic = TRUE;
			}
		}
		else if (IsClipboardFormatAvailable(CF_HDROP))
		{
			HDROP hDrop = (HDROP)GetClipboardData(CF_HDROP);
			onDropFiles(hDrop);
		}
		CloseClipboard();
	}
}
Ejemplo n.º 2
0
LRESULT UIIMEdit::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)
{
	if (uMsg == WM_KEYDOWN)
	{
		if ('V' == wParam && ::GetAsyncKeyState(VK_CONTROL) & 0x8000)
		{
			_ImEditPaste();
		}
		else if (VK_RETURN == wParam)//回车
		{
			module::TTConfig* pTTConfig = module::getSysConfigModule()->getSystemConfig();
			BOOL bWantCtrlEnter = (pTTConfig->sysBaseFlag & module::BASE_FLAG_SENDIMG_BY_CTRLENTER);
			SetWantReturn(!bWantCtrlEnter);
		}
	}
	else if (uMsg == WM_KILLFOCUS)
	{
		//removed by kuaidao 2015-03-05,这段话会导致焦点之间切换有问题
		////fix bug,当嵌入Windows控件时,如果别的windows控件(如嵌入的IE,它是该窗口的一个子窗口)得到Focus的时候,自己的焦点并没有去掉,造成下次不能再输入
		//https://code.google.com/p/duilib/issues/detail?id=102
		//if (m_bFocused && m_pManager
		//	&& m_pManager->GetFocus() == this)
		//{
		//	OutputDebugString(_T("-------WM_KILLFOCUS\n"));
		//	m_pManager->SetFocus(NULL);
		//	m_bFocused = FALSE;
		//}

		if (m_pTwh)
		{
			m_pTwh->GetTextServices()->OnTxUIDeactivate();
			m_pTwh->GetTextServices()->TxSendMessage(WM_KILLFOCUS, 0, 0, 0);
			m_pTwh->TxShowCaret(FALSE);
		}
	}
	else if (uMsg == WM_SETFOCUS)
	{
		if (m_pTwh)
		{
			m_pTwh->GetTextServices()->OnTxUIActivate();
			m_pTwh->GetTextServices()->TxSendMessage(WM_SETFOCUS, 0, 0, 0);
			m_pTwh->TxShowCaret(TRUE);
		}
	}
	else if (uMsg == WM_DROPFILES)
	{//文件拖拽
		HDROP hDrop = (HDROP)wParam;
		onDropFiles(hDrop);
	}
	return __super::MessageHandler(uMsg, wParam, lParam, bHandled);
}
Ejemplo n.º 3
0
LRESULT CMainWindow::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if (uMsg == WM_MOUSEMOVE)
		OnMouseMove(uMsg, wParam, lParam);

	if (uMsg == WM_RBUTTONDOWN)
	{
		LRESULT lRes = __super::HandleMessage(uMsg, wParam, lParam);
		OnRButtonDown(uMsg, wParam, lParam);
		return lRes;
	}

	if (uMsg == WM_LBUTTONDBLCLK)
		OnLButtonDblClk(uMsg, wParam, lParam);

 	if ((m_pSendEdit != NULL) && m_pSendEdit->IsFocused() 
 		&& (uMsg == WM_KEYDOWN) && (wParam == 'V') && (lParam & VK_CONTROL))	// 发送消息框的Ctrl+V消息
 	{
 		m_pSendEdit->PasteSpecial(CF_TEXT);
 		return TRUE;
 	}

	if (uMsg == WM_NOTIFY && EN_PASTE == ((LPNMHDR)lParam)->code)
	{
		ITextServices * pTextServices = m_pSendEdit->GetTextServices();
		if ((UINT)pTextServices == ((LPNMHDR)lParam)->idFrom)
		{
			AddMsgToSendEdit(((NMRICHEDITOLECALLBACK *)lParam)->lpszText);
		}
		if (pTextServices != NULL)
			pTextServices->Release();
	}

	if (uMsg == WM_MENU)
	{
		CControlUI * pControl = (CControlUI *)lParam;
		if (pControl != NULL)
			this->paint_manager_.SendNotify(pControl, _T("menu_msg"), wParam, lParam);
	}

	if (uMsg == FACE_CTRL_SEL)
		return OnFaceCtrlSel(uMsg, wParam, lParam);

	if (uMsg == WM_DROPFILES)
		return onDropFiles(uMsg, wParam, lParam);

	return __super::HandleMessage(uMsg, wParam, lParam);
}
Ejemplo n.º 4
0
/*===============================================================
 *  WMHandler::onDropFiles_()
 *  ドロップファイルの定型處理を行ひ、ユーザ實裝部を呼び出す
 */
void urania::WMHandler::onDropFiles_(urania::Window* win, WPARAM wp)
{
  HDROP hd = (HDROP)wp;
  POINT p;
  DragQueryPoint(hd, &p);

  std::vector<std::wstring> astr;
  wchar_t temp[MAX_PATH];
  int n = DragQueryFile(hd, 0xffffffff, nullptr, 0);

  for (int i = 0; i < n; i++)
  {
    DragQueryFile(hd, i, temp, MAX_PATH);
    astr.push_back(temp);
  }

  DragFinish(hd);

  // ユーザがサブクラスでオーバーライドするハンドラを呼び出し
  onDropFiles(win, astr, p.x, p.y);
}