फ़ाइल मैपिंग का उपयोग कर फ़ाइल को संपादन नियंत्रण में अलग पंक्ति नहीं पढ़ें

मुझे समस्या है: मैं फ़ाइल पढ़ने के लिए फ़ाइल मैपिंग का उपयोग करता हूं लेकिन यह संपादन नियंत्रण में अलग लाइन प्रदर्शित नहीं करता है:

szFileName = L"abc.txt";
hFile = CreateFile(szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
pMemory = MapViewOfFile(hMapFile, FILE_MAP_READ, 0,0,0);

int size_needed = MultiByteToWideChar(CP_UTF8, 0, (LPCCH)pMemory, -1, NULL, 0);
wchar_t *buffer = new wchar_t[size_needed];
MultiByteToWideChar(CP_UTF8, 0, (LPCCH)pMemory, -1, buffer, size_needed);

FileSize = GetFileSize(hFile, NULL);
SendMessage(hWndEdit, WM_SETTEXT, 0, (LPARAM)buffer);
delete[] buffer;
UnmapViewOfFile(pMemory);
CloseHandle(hMapFile);
CloseHandle(hFile);

मेरा संपादन नियंत्रण:

hWndEdit = CreateWindowEx(NULL, L"Edit", NULL,
                        WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL,
                        50,35,900,300,hWnd,(HMENU)IDC_EDIT,hInstance,NULL);

मैं यूनिकोड का उपयोग करता हूं।

जबकि मैं pmemory और buffer डीबग करता हूं, मुझे लगता है कि इसमें नया लाइन वर्ण होता है, लेकिन संपादन नियंत्रण में अलग-अलग रेखा प्रदर्शित नहीं होती है।

त्रुटि कहां है और कैसे ठीक करें! ???

0
जोड़ा संपादित
विचारों: 1
SendMessage() वापस क्या करता है? शायद सेट टेक्स्ट कॉल विफल हो रहा है।
जोड़ा लेखक HerrJoebob, स्रोत

2 उत्तर

एक नई लाइन बनाने के लिए संपादन नियंत्रण को "\ r \ n" अनुक्रम (यानी वर्ण मान 0x0D 0x0A ) की आवश्यकता होती है। संपादन नियंत्रण में आपको ES_MULTILINE शैली को भी लागू करने की आवश्यकता होगी।

4
जोड़ा

You need reference Edit control style, at here: http://msdn.microsoft.com/en-us/library/windows/desktop/bb775464%28v=vs.85%29.aspx

और जैसा कि आप देख सकते हैं, आपको अपने संपादन नियंत्रण में ES_MULTILINE जोड़ने की आवश्यकता है:

hWndEdit = CreateWindowEx(NULL, L"Edit", NULL,
           WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT | ES_AUTOHSCROLL | ES_MULTILINE, 50,35,900,300,hWnd,(HMENU)IDC_EDIT,hInstance,NULL);
1
जोड़ा