विजुअल C++ 2012 आर सी, Win7सी ++: यह विंडो शीर्षक क्यों छोटा हो जाता है?
चीनी सरलीकृत
प्रोजेक्ट गुण> सेट
जब मैं इस कार्यक्रम चलाने के लिए, विंडो के शीर्षक एक भी अक्षर "S" पता चलता है, एक पूरी नहीं बहु बाइट वर्ण का उपयोग करें शब्द "नमूना"।
#pragma comment(linker, "/SubSystem:Windows")
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int) {
WNDCLASSW wc = { 0 };
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION);
wc.hCursor = LoadCursor(nullptr, IDC_ARROW);
wc.hbrBackground = reinterpret_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
wc.lpszClassName = L"MyWindowClass";
wc.lpfnWndProc = [](HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (uMsg - WM_DESTROY)
return DefWindowProc(hWnd, uMsg, wParam, lParam);
else {
PostQuitMessage(0);
return HRESULT();
}
};
RegisterClassW(&wc);
CreateWindowExW(0, L"MyWindowClass", L"Sample",
WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, SW_SHOW, CW_USEDEFAULT, 0,
nullptr, nullptr, hInstance, nullptr);
for (MSG msg; GetMessage(&msg, nullptr, 0, 0); DispatchMessage(&msg));
}
अगर मैं यूनिकोड (प्रोजेक्ट गुण) का उपयोग, स्रोत कोड में कोई बदलाव नहीं रखने के लिए, विंडो शीर्षक, "नमूना" से पता चलता सही लग रहा है।
यदि मैं बहु बाइट का उपयोग करता हूं, तो स्रोत कोड में मैं WNDCLASS = {..., "MyWindowClass"} और RegisterClassA का उपयोग करता हूं, CreateWindowExW अपरिवर्तित रखें, विंडो शीर्षक शब्द "नमूना" दिखाता है, सही दिखता है।
यदि मैं बहु बाइट का उपयोग करता हूं, तो स्रोत कोड में मैं CreateWindowExA ("MyWindowClass", "नमूना") का उपयोग करता हूं, WNDCLASSW और RegisterClassW अपरिवर्तित रखें, विंडो शीर्षक अक्षर "एस" दिखाता है।
यह एक "एस" दिखाता है, क्या मैं कुछ गलत कर रहा हूं?
संलग्न
अगर मैं सभी अपरिवर्तित रखने के लिए, कि, बहु बाइट, उपयोग कोड ऊपर दिखाए गए, विंडो शीर्षक से पता चलता "S" अक्षर का उपयोग कर रहा है।
(यदि आप इस प्रोग्राम को चलाते हैं और "एस" के बजाए विंडो शीर्षक पर "नमूना" देखते हैं, तो यह अधिक संभावना है कि वीसी ++ 2012 (या ओएस) के chs संस्करण पर एक विशिष्ट समस्या हो।)
आपने संस्करण के लिए कोड क्यों पोस्ट किया है जो सही तरीके से काम करता है? जो संस्करण काम नहीं करता है वह समस्या का निदान करने में अधिक उपयोगी होगा। –
यह अजीब लग रहा है। रजिस्टर क्लास संस्करण का उपयोग यह निर्धारित करता है कि यह एक यूनिकोड विंडो है ('IsWindowUnicode()') या नहीं। विंडोज दो तरह से अनुवाद यूनिकोड <-> एएनएसआई करता है, इसलिए आपको यूनिकोड और एएनएसआई फ़ंक्शन कॉल को मिश्रित करने में सक्षम होना चाहिए। लेकिन: आप ऐसा क्यों करना चाहते हैं? क्यों न केवल उनमें से एक का उपयोग करें, अंत में ए और डब्ल्यू के बिना उन लोगों का उपयोग करें, ताकि विंडोज हेडर फाइलें प्रोजेक्ट गुणों में सेट किए गए संस्करण में मैप करें (उदाहरण के लिए 'रजिस्टर क्लास' - बिना ए या डब्ल्यू के, मैपिंग 'रजिस्टर क्लासए 'या' RegisterClassW' स्वचालित रूप से)? –
@ जो गौटरिन यदि ऊपर पोस्ट किया गया कोड सही है, तो विंडो शीर्षक में "नमूना" सही ढंग से दिखाता है, तो हो सकता है कि यह वीसी ++ 2012 आरसी सीएस पर एक बग है। ऊपर पोस्ट कोड मेरे सिस्टम पर एक "एस" दिखाता है: डी – WangZm