我正在使用Windows 8 x64筆記本電腦。用Qt5開發。 我處理非客戶區顏色(特別是顏色框)有一些困難。 我沒有找到一些易於使用的功能或流程來做到這一點。我發現要處理標題欄顏色的DWM消息是WM_DWMCOLORIZATIONCOLORCHANGED,我想修改其wParam變量以設置新的顏色。Qt :: nativeEvent調用
現在我試圖擴展框架到客戶區,在nativeEvent函數的實現中使用QtWin :: extendFrameIntoClientArea函數。因爲它遵循:
bool SkyFlies::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
Q_UNUSED(result);
Q_UNUSED(eventType);
MSG *msg = static_cast<MSG*>(message);
if(msg->message == WM_ACTIVATE)
{
const QMargins marge(-1, -1, -1, -1);
QtWin::extendFrameIntoClientArea(this, marge);
}
return false;
}
我的問題是: 在一段代碼,我想打電話給前面的功能,
SkyFlies::SkyFlies()
{
...
this->nativeEvent();
...
}
我想知道如何填寫功能參數。 我知道這聽起來有點愚蠢,但我很堅持。
謝謝!
這裏有一個更新:
錯誤LNK2019一樣解析的外部符號......真是糟透了!
當我搜索我的問題時,我發現了一個漂亮的代碼來定製窗口框架。我用它在我的代碼和修復編譯器錯誤後,我得到了DwmExtendFrameIntoClientArea功能 這裏LNK 2019錯誤代碼: 頭文件 -
#include <QtWidgets>
#ifdef Q_OS_WIN
#include <Windows.h>
#include <WinUser.h>
#include <windowsx.h>
#include <dwmapi.h>
#include <minmax.h>
#include <gdiplus.h>
#include <gdipluscolor.h>
#endif
class SkyFlies : public QMainWindow
{
Q_OBJECT
...
void showEvent(QShowEvent *event); // Manage window borders
void windowBorderless(); // Show a borderless window for Windows system
void windowShadow(); // Set shadow border effect
...
};
實現文件級
// Manage window borders
void SkyFlies::showEvent(QShowEvent *event)
{
QWidget::showEvent(event);
#ifdef Q_OS_WIN
this->windowBorderless();
#endif
}
#ifdef Q_OS_WIN
void SkyFlies::windowBorderless()
{
if(this->isVisible())
{
SetWindowLongPtr((HWND)winId(), GWL_STYLE, WS_POPUP | WS_CAPTION | WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX);
this->windowShadow();
SetWindowPos((HWND)winId(), 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE);
}
}
void SkyFlies::windowShadow()
{
const MARGINS shadow={1, 1, 1, 1};
HRESULT hr = S_OK;
hr = DwmExtendFrameIntoClientArea((HWND)winId(), &shadow);
}
#endif
請問,我該如何解決LNK2019問題? 我試圖運行QMake沒有任何成功。這是我的.pro文件:
QT += widgets
SOURCES += \
main.cpp \
SkyFlies.cpp
HEADERS += \
SkyFlies.h \
SkyWord.h
SkyWord文件爲空。 感謝
至於其他更新,我剛剛看了最後的答案,我通過在頭文件中添加
#pragma comment (lib,"Dwmapi.lib")
固定鏈接問題,幾個小時前。 最終,我得到了一個延伸通過標題欄的窗口。現在我正在努力尋找一種方法來改變標題欄的顏色。但我沒有看到任何令人滿意的解決方案。我認爲我可以處理WM_DWMCOLORIZATIONCHANGED消息,但沒有。
而有關自定義標題欄(http://msdn.microsoft.com/en-us/library/bb688195%28VS.85%29.aspx#appendixb)的MSDN示例不會談論改變顏色。但是也許有些事情要處理WM_NCPAINT消息。
你可以畫畫,你想要達到什麼目的?負邊距的設置看起來很奇怪。 – 2014-10-30 16:26:54
嗨德米特里,我閱讀你的答案,我正在努力。謝謝。我想要做的是構建像Adobe或Office界面的東西。對於-1邊距,我使用了Qt5中記錄的extendFrameIntoClientArea函數的推薦值。 – Patrik 2014-10-31 11:17:33
不要忘記設置正確的Windows版本(在定義WINVER中)並鏈接必要的庫以支持DWM。可能會解決你的鏈接器錯誤。 – 2014-10-31 14:13:13