From 54f9a1ed4b28842e610f13978a7cca8fbb2d096a Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <2546789017@qq.com> Date: Mon, 12 Oct 2020 15:27:45 +0800 Subject: [PATCH] Update. Signed-off-by: Yuhang Zhao <2546789017@qq.com> --- README.md | 20 ++++++++++++-------- screenshots/mainwindow.png | Bin 0 -> 18477 bytes 2 files changed, 12 insertions(+), 8 deletions(-) create mode 100644 screenshots/mainwindow.png diff --git a/README.md b/README.md index e2b669f..b361eea 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ If you are using part of or all of the code from this repository in your own pro ![Qt Widgets example](/screenshots/widgets.png) +![Qt MainWindow example](/screenshots/mainwindow.png) + ![Qt Quick example](/screenshots/quick.png) ## Features @@ -39,20 +41,20 @@ int main(int argc, char *argv[]) { // ... QWidget widget; // Do this before the widget is shown. - WinNativeEventFilter::addFramelessWindow(reinterpret_cast(widget.winId())); + WinNativeEventFilter::addFramelessWindow(&widget); widget.show(); // ... } ``` -Please refer to [**main_windows.cpp**](/main_windows.cpp) for more detailed information. +Please refer to [the QWidget example](/examples/QWidget/main.cpp) for more detailed information. ### Ignore areas and etc ```cpp -WinNativeEventFilter::WINDOWDATA data; -// The window can't be resized if fixedSize is set to TRUE. -data.fixedSize = FALSE; +WinNativeEventFilter::WINDOWDATA data = {}; +// The window can't be resized if fixedSize is set to true. +data.fixedSize = false; // All the following values should not be DPI-aware, just use the // original numbers, assuming the scale factor is 1.0, don't scale // them yourself, this code will do the scaling according to DPI @@ -73,11 +75,11 @@ data.ignoreAreas.append(pushButton_close.geometry()); // The **POINTER** of a QWidget or QQuickItem data.ignoreObjects.append(ui->pushButton_minimize); // Pass data as the second parameter -WinNativeEventFilter::addFramelessWindow(reinterpret_cast(widget.winId()), &data); +WinNativeEventFilter::addFramelessWindow(&widget, &data); // Or -WinNativeEventFilter::setWindowData(reinterpret_cast(widget.winId()), &data); +WinNativeEventFilter::setWindowData(&widget, &data); // Or modify the window data of a specific window directly: -const auto data = WinNativeEventFilter::windowData(reinterpret_cast(widget.winId())); +const auto data = WinNativeEventFilter::windowData(&widget); data.borderWidth = 5; data.borderHeight = 5; data.titleBarHeight = 30; @@ -177,6 +179,8 @@ Thanks **Lucas** for testing this code in many various conditions. Thanks [**Shujaat Ali Khan**](https://github.com/shujaatak) for searching so many useful articles and repositories for me. +Thanks [**Julien Maille**](https://github.com/JulienMaille) for adding the `QMainWindow` example. + ## License ```text diff --git a/screenshots/mainwindow.png b/screenshots/mainwindow.png new file mode 100644 index 0000000000000000000000000000000000000000..b1b6518445fb08ce685d4986512e6090cdce8d22 GIT binary patch literal 18477 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%0DGNS=flD7)Yshi=!=9aOi`aF)>hihj{J`yk zMuCdiyuh5*8`rO2AG!BE-3&DBVjAM)T!`d0G*;T*1B=CWerp?58YpoNoQMXeb-)lA zy?6+1;Wg7MmdI9zS5iP;m<(YC8{oEs~FTq^ajo=n5FsugYq zCX5U1)C_?`8$?ZGqbiNGpMfd+&I5XT4IA#dVWFQ-iQss+cz*d<_#4owL;Ic)RUUpA zaB1xhHraj@R!PB2-E9Ro(<;Z?JZYfI3Pko}-{oF9Ft>DbXhs%f&PZ4XX?PO^B=nm;u{1PyG9Rio=W z6un_`Pib{7(HgXk(R;g$&npa-gj{p~=z-171= zBk1D^`n((f4gUJxnbxFdk6zFkveb6IncOhs~bcY+#c*|<6yDhspaAiQIRxs+a zEl9aY689JJulYcGG6(vf0=5R2e8|}E>F5#A2Q?aSaJPx7U=PbKYd<;;8Ntgmux?Dm zgDyQUJGR?b(Y1%}a_jgdqaXc=e{}Es|7IV$-hMP_Fzkjba0Stse%)>M`m@92XLrsY z{Vo5+y;Ah!dAipEJ{Z-(^&j`Q{GWpQ-_XYMZ>bMthd-@Bx5+RR79g|A~^BL+}904|Mb^sQPzF?`BcpD?haI-wO&b%&3m|XWsk&YCGls zZ#Dg24WA}8w8rq;`*3z?0Y<=W@SrIP%si&~EtE~~!-3g9dNr7sj>k|*jXXz>)lG<0{v-lyHHA+B*mvMY!DoxF2 zVUQgROMba7^$^d-M1#(82k$&#P}u`d%&|f|5IsbH_7ciZ0>1E}ugI>WI$-N44^JI} zHqji@fTw`6pidJ)owHNpW5eB$MeeK31OuMR+DUk@M8Gg)cIrKc9ojaiBEi7jOxG)E zyY}a5fvOb`x-KFf?1xw*CbE$aERz7W*h3<^Kgo#)kybkO1m#`7eo9wovcqtjXOtA- zn|R075+1U)FlK-Q0&iZzb*U=Pg~75I5j_D_e-pY!wAs|xA3l6ocnB()r&_1P4#qkQ z@er5L{-6W*PIKet&c2#6HAqL3&5-m=1ZEujO3@=E&9CSQ>U%K3I0q^# zByw~*I}JPYDjVzpmg^7cDbpz9VBWx|1`JM9#lb{y1eD4ZyaYY`$Mo%Dz@i^Ahc;K# z5t8obz5Q}-Wnn*LV38XW4nY$6XZe*gYCBmDu;zWTw3)5A4^ff&XP z<>im-@u+4HHdjt?)D*d4AWuS(zL4jk`u8AjLJw>$b=wyW@zgbHMxKVUJbudC7ZxoC zPpk$m_V6QHjNe34G;|0Uhm~7^LvI{kxD>kvP*t(jEjk?+V3|Og2(U~cW3emWKZB80 zJ1_l8OxMyv#2886f(33P0{4FHs{^ZHq#fdCkp z^0J-L+Qynn0W%SIasI||nDph7s29-JwJLBFB= z`xz));IzyqNIIH@cbrv?aw+lCjmr%mBI1cu`1b0>4Ee$!)auVa|oZJ_ayY9urx&EA(gXBj)NcN0|^gZ=!TI!Bd8lORvn>bffI+eaK-Y<3y#O38a_5% z6OIDYO1}w$@o2snp3dJ*cy615;p&-lP$4j890_wbhF8l8i$|W51*^`j)l?`Ul28=w z+jB(N$DE^AV{9QJB${HX;f{*m6OT63{Vq0ZWgY|@gw$1> zFWjXTSt$oFVJFl{PBy8LUn1q>kGlVMf!qht0>2dCH`a#F7}YBs6+(sMLRFIeEO38gf~!5p3f(G2V@>|QiHrG| z<4!}zBEjgpmHlCBz+B?{F_S9!5UByTXagQjri^paLN8#0Ku`Egj;QW&i|D6EotZLn zU?JCqpMoLqi#u?xUg5f}75LpF5YZP0rh&E)zlw#DIKTXsjDLBA{$Q6w64MZC$QqFA zoyCDp`X&S4f99{S{