めいくりぷとのブログ

技術的なことやゲームのことやら・・・

ウィンドウフレーム以外からでもウィンドウを移動出来るようにする。

前回同じような記事を書いたのですが、継承するクラスによっては移動出来ない物もあったみたいですので、今回は nativeEvent関数をオーバーライドして実装してみました。

bool CMainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
	MSG *msg = reinterpret_cast<MSG*>(message);

	switch (msg->message)
	{
		case WM_LBUTTONDOWN:
		{
			if (!this->m_bClicked)
			{
				this->m_bClicked = true;
				this->m_originPos.setX(GET_X_LPARAM(msg->lParam));
				this->m_originPos.setY(GET_Y_LPARAM(msg->lParam));
			}
			break;
		}
		case WM_LBUTTONUP:
		{
			if (this->m_bClicked)
				this->m_bClicked = false;
			break;
		}
		case WM_MOUSEMOVE:
		{
			if (this->m_bClicked)
			{
				this->move(
					this->pos().x() + GET_X_LPARAM(msg->lParam) - this->m_originPos.x(),
					this->pos().y() + GET_Y_LPARAM(msg->lParam) - this->m_originPos.y());
			}
			break;
		}
		default:
			return QWidget::nativeEvent(eventType, message, result);
	}

	return false;
}