मुझे शीर्षक पट्टी के बिना एक विंडो चाहिए, लेकिन आकार बदलने योग्य फ्रेम और छाया के साथ। यह आसानी से WS_CAPTION को हटाकर और WS_THICKFRAME जोड़कर हासिल किया जा सकता है, हालांकि, विंडोज 10 के बाद, एक 6 पीएक्स सफेद गैर-क्लाइंट क्षेत्र है।रेजिज़ेबल सीमा के बिना टाइटलबार के बिना विंडो बनाएं और 6px सफेद पट्टी के बिना
निम्नलिखित कोड के साथ मैं एक खिड़की बना देता हूं और काले रंग के साथ सभी क्लाइंट क्षेत्र को पेंट करता हूं, खिड़की एक बाएं, दाएं और नीचे 6 पीएक्स पारदर्शी मार्जिन पाती है, हालांकि शीर्ष मार्जिन सफेद है।
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
// Create the window.
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"", // Window text
0,
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
ShowWindow(hwnd, nCmdShow);
LONG lStyle = GetWindowLong(hwnd, GWL_STYLE);
lStyle |= WS_THICKFRAME;
lStyle = lStyle & ~WS_CAPTION;
SetWindowLong(hwnd, GWL_STYLE, lStyle);
SetWindowPos(hwnd, NULL, 0,0,0,0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
// Run the message loop.
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// Paint everything black
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOWTEXT));
EndPaint(hwnd, &ps);
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
मैं सफेद धारी कैसे निकाल सकते हैं? मुझे यह संबंधित क्यूटी बग रिपोर्ट QTBUG-47543 भी मिली जो कि क्यूटी समस्या नहीं होने के कारण बंद कर दिया गया था, क्योंकि इसे win32 api के साथ पुन: उत्पन्न किया जा सकता है।
आपके Win7 compat उदाहरण में फ्रेम के चारों ओर छाया नहीं है, किसी को पाने के लिए कोई तरीका नहीं है? –
आप 'WNDCLASS' पंजीकरण के लिए' wc.style = CS_DROPSHADOW; 'जोड़ सकते हैं। यह दाएं तरफ और नीचे की तरफ छाया को छोड़ देता है। उदाहरण के लिए जीडीआई + के साथ, इसके चारों ओर छाया जोड़ने के लिए मैन्युअल रूप से किया जाना है। –
कभी-कभी मुझे अभी भी सफेद पट्टी दिखाई देती है। WM_NCACTIVATE को पकड़ने से अधिकांश घटनाएं ठीक हो जाती हैं, लेकिन कभी-कभी खिड़की को वास्तव में तेज़ी से ले जाने पर यह सफेद पट्टी हो जाती है। मुझे कोई अन्य विंडोज़ ईवेंट ब्लॉक करना चाहिए? –