示例#1
0
MsgRouting 
AwtCheckbox::WmMouseUp(UINT flags, int x, int y, int button)
{
    MsgRouting mrResult = AwtComponent::WmMouseUp(flags, x, y, button);

    POINT p = {x, y};
    RECT rect;
    ::GetClientRect(GetHWnd(), &rect);

    if (::PtInRect(&rect, p) && button == LEFT_BUTTON) {
        WmNotify(BN_CLICKED);
    }

    return mrResult;
}
示例#2
0
MsgRouting AwtCheckbox::HandleEvent(MSG *msg, BOOL synthetic)
{
    if (IsFocusingMouseMessage(msg)) {
        SendMessage(BM_SETSTATE, (WPARAM)(msg->message == WM_LBUTTONDOWN ? TRUE : FALSE));
        delete msg;
        return mrConsume;
    }
    if (IsFocusingKeyMessage(msg)) {
        SendMessage(BM_SETSTATE, (WPARAM)(msg->message == WM_KEYDOWN ? TRUE : FALSE));
        if (msg->message == WM_KEYDOWN) {
            m_fLButtonDowned = TRUE;
        } else if (m_fLButtonDowned == TRUE) {
            WmNotify(BN_CLICKED);
            m_fLButtonDowned = TRUE;
        }
        delete msg;
        return mrConsume;
    }
    return AwtComponent::HandleEvent(msg, synthetic);
}
示例#3
0
MsgRouting
AwtCheckbox::WmMouseUp(UINT flags, int x, int y, int button)
{
    MsgRouting mrResult = AwtComponent::WmMouseUp(flags, x, y, button);

    if (::IsWindow(AwtWindow::GetModalBlocker(AwtComponent::GetTopLevelParentForWindow(GetHWnd()))))
    {
        return mrConsume;
    }

    POINT p = {x, y};
    RECT rect;
    ::GetClientRect(GetHWnd(), &rect);

    if (::PtInRect(&rect, p) && button == LEFT_BUTTON && m_fLButtonDowned) {
        WmNotify(BN_CLICKED);
    }
    m_fLButtonDowned = FALSE;
    return mrResult;
}
示例#4
0
MsgRouting AwtList::HandleEvent(MSG *msg, BOOL synthetic)
{
    if (IsFocusingMouseMessage(msg)) {
        LONG item = static_cast<LONG>(SendListMessage(LB_ITEMFROMPOINT, 0, msg->lParam));
        if (item != LB_ERR) {
            if (isMultiSelect) {
                if (IsItemSelected(item)) {
                    Deselect(item);
                } else {
                    Select(item);
                }
            } else {
                Select(item);
            }
        }
        delete msg;
        return mrConsume;
    }
    if (msg->message == WM_KEYDOWN && msg->wParam == VK_RETURN) {
        WmNotify(LBN_DBLCLK);
    }
    return AwtComponent::HandleEvent(msg, synthetic);
}
示例#5
0
文件: Window.cpp 项目: acook/out_asio
LRESULT
SWindow::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if(HWindow == NULL) HWindow = hwnd;

	Org_Mes	OrgMes;

	OrgMes.AutoDelete      = AutoDelete;
	OrgMes.ControlMode     = ControlMode;
	OrgMes.HWindow         = hwnd;
	OrgMes.OriginalWndProc = OriginalWndProc;

	OrgMes.uMsg   = uMsg;
	OrgMes.wParam = wParam;
	OrgMes.lParam = lParam;

	OrgMes.ExecMessage = false;
	OrgMes.RetProcCode = 0;

	bool	RetMessage = false;
	LRESULT	RetCode;

	switch(uMsg) {
	case WM_COMMAND:
		WmCommand(&OrgMes, HIWORD(wParam), LOWORD(wParam), reinterpret_cast<HWND>(lParam));
		break;
	case WM_SYSCOMMAND:
		WmSysCommand(&OrgMes, static_cast<UINT>(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_APPCOMMAND:
		RetMessage = true;
		RetCode = WmAppCommand(&OrgMes, lParam);
		break;
	case WM_NOTIFY:
		RetMessage = true;
		RetCode = WmNotify(&OrgMes, static_cast<UINT>(wParam), reinterpret_cast<LPNMHDR>(lParam));
		break;
	case WM_SHOWWINDOW:
		WmShowWindow(&OrgMes, wParam, lParam);
		break;
	case WM_SIZE:
		WmSize(&OrgMes, static_cast<UINT>(wParam), LOWORD(lParam), HIWORD(lParam));
		break;
	case WM_MOVE:
		WmMove(&OrgMes, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_PAINT:
		WmPaint(&OrgMes);
		break;
	case WM_MOUSEMOVE:
		WmMouseMove(&OrgMes, static_cast<UINT>(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_LBUTTONDOWN:
		WmLButtonDown(&OrgMes, static_cast<UINT>(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_RBUTTONDOWN:
		WmRButtonDown(&OrgMes, static_cast<UINT>(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_LBUTTONUP:
		WmLButtonUp(&OrgMes, static_cast<UINT>(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_RBUTTONUP:
		WmRButtonUp(&OrgMes, static_cast<UINT>(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_LBUTTONDBLCLK:
		WmLButtonDblClk(&OrgMes, static_cast<UINT>(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_RBUTTONDBLCLK:
		WmRButtonDblClk(&OrgMes, static_cast<UINT>(wParam), GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		break;
	case WM_DROPFILES:
		WmDropFiles(&OrgMes, reinterpret_cast<HDROP>(wParam));
		break;
	case WM_KEYDOWN:
		WmKeyDown(&OrgMes, static_cast<int>(wParam), static_cast<UINT>(lParam));
		break;
	case WM_CHAR:
		WmChar(&OrgMes, static_cast<TCHAR>(wParam), static_cast<UINT>(lParam));
		break;
	case WM_CONTEXTMENU:
		WmContextMenu(
					&OrgMes,
					reinterpret_cast<HWND>(wParam),
					GET_X_LPARAM(lParam),
					GET_Y_LPARAM(lParam));
		break;
	case WM_MENUSELECT:
		WmMenuSelect(&OrgMes, LOWORD(wParam), HIWORD(wParam), reinterpret_cast<HMENU>(lParam));
		break;
	case WM_DRAWITEM:
		RetMessage = true;
		RetCode = WmDrawItem(
						&OrgMes,
						static_cast<int>(wParam),
						reinterpret_cast<LPDRAWITEMSTRUCT>(lParam));
		break;
	case WM_TIMER:
		WmTimer(&OrgMes, static_cast<UINT>(wParam), reinterpret_cast<TIMERPROC*>(lParam));
		break;
	case WM_ACTIVATE:
		WmActivate(&OrgMes, LOWORD(wParam), HIWORD(wParam) != 0, reinterpret_cast<HWND>(lParam));
		break;
	case WM_SETCURSOR:
		WmSetCursor(&OrgMes, reinterpret_cast<HWND>(wParam), LOWORD(lParam), HIWORD(lParam));
		break;
	case WM_SETFOCUS:
		WmSetFocus(&OrgMes, reinterpret_cast<HWND>(wParam));
		break;
	case WM_KILLFOCUS:
		WmKillFocus(&OrgMes, reinterpret_cast<HWND>(wParam));
		break;
/*
	case WM_CTLCOLORDLG:
		RetMessage = true;
		RetCode = reinterpret_cast<LRESULT>
							(WmCtlColorDlg(&OrgMes, reinterpret_cast<HWND>(lParam),
							reinterpret_cast<HDC>(wParam)));
		break;
	case WM_CTLCOLORSTATIC:
		RetMessage = true;
		RetCode = reinterpret_cast<LRESULT>
							(WmCtlColorStatic(&OrgMes, reinterpret_cast<HWND>(lParam),
							reinterpret_cast<HDC>(wParam)));
		break;
	case WM_CTLCOLOREDIT:
		RetMessage = true;
		RetCode = reinterpret_cast<LRESULT>
							(WmCtlColorEdit(&OrgMes, reinterpret_cast<HWND>(lParam),
							reinterpret_cast<HDC>(wParam)));
		break;
	case WM_CTLCOLORLISTBOX:
		RetMessage = true;
		RetCode = reinterpret_cast<LRESULT>
							(WmCtlColorListBox(&OrgMes, reinterpret_cast<HWND>(lParam),
							reinterpret_cast<HDC>(wParam)));
		break;
	case WM_ERASEBKGND:
		RetMessage = true;
		RetCode = WmEraseBkGnd(&OrgMes, reinterpret_cast<HDC>(wParam));
		break;
*/
	case WM_CREATE:
		RetMessage = true;
		RetCode = WmCreate(&OrgMes, reinterpret_cast<LPCREATESTRUCT>(lParam));
		SetupWindow();
		break;
	case WM_INITDIALOG:
		RetMessage = true;
		RetCode = WmInitDialog(&OrgMes, reinterpret_cast<HWND>(wParam), static_cast<LONG>(lParam));
		break;
	case WM_CLOSE:
		WmClose(&OrgMes);
		break;
	case WM_DESTROY:
		WmDestroy(&OrgMes);
		if(OrgMes.AutoDelete) {
			SetWindowLongPtr(GWLP_USERDATA, NULL);
			delete this;
		}
		break;
	case WM_SYSCOLORCHANGE:
		WmSysColorChange(&OrgMes);
		break;
	case WM_QUERYENDSESSION:
		RetMessage = true;
		RetCode = WmQueryEndSession(&OrgMes, static_cast<UINT>(wParam));
		break;
	case WM_ENDSESSION:
		WmEndSession(&OrgMes, wParam != 0);
		if(OrgMes.AutoDelete && wParam) {
			SetWindowLongPtr(GWLP_USERDATA, NULL);
			delete this;
		}
		break;
	default:
		if((uMsg >= WM_USER) && (uMsg <= 0x7fff)) {
			RetMessage = true;
			RetCode = WmUser(&OrgMes, uMsg, wParam, lParam);
		} else {
			DefaultProc(&OrgMes);
		}
		break;
	}

	if(RetMessage == false) {
		if(OrgMes.OriginalWndProc || (OrgMes.ControlMode == ControlMode_Normal)) {
			RetCode = OrgMes.ExecMessage ? 0 : OrgMes.RetProcCode;
		} else {
			RetCode = OrgMes.ExecMessage;
		}
	}

	return RetCode;
}