никак не пойму почему в UNICODE-версии печатает один символ собираю тест коммандой cl test.c /link kernel32.lib user32.lib работает (при ресайзе печатает сообщение) а так cl test.c -DUNICODE /link kernel32.lib user32.lib собирается, MessageBox всё показывает, а RichEdit только одну букву Код (Text): #pragma comment(linker, "/ENTRY:EntryPoint") #pragma comment(linker, "/SUBSYSTEM:WINDOWS") #pragma comment(linker, "/NODEFAULTLIB") #define _WIN32_WINNT 0x0502 #define _WIN32_IE 0x0600 #include <windows.h> #include <richedit.h> #define MAX_B_BUF (1025*sizeof(TCHAR)) // размер буфера в байтах #define MAX_T_BUF 1025 // размер буфера в TCHAR TCHAR* lptstrTextBuf; // буфер HWND hwndRichEd; LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //______________________________________ void Wout(register BYTE outp, TCHAR* format, ...) { /* Вывод сообщение в RichEdit , или просто MessageBox outp - сумма бит куда выводить (outp & 1 richedit ; outp & 2 Показать GetLastError) format - формат вывода (wvsprintf) ..... данные */SETTEXTEX settxt ={ ST_SELECTION, CP_ACP }; va_list args = NULL; register TCHAR* cTmp = lptstrTextBuf; va_start(args, format); cTmp += wvsprintf(cTmp, format, args); va_end(args); if (outp & 2) { register DWORD dw = GetLastError(); cTmp += wsprintf(cTmp, TEXT("ErrorCode: %#08X\r\n\t"), dw); cTmp += FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, LANG_NEUTRAL, cTmp, 500, NULL ); } if (outp & 1) { SendMessage(hwndRichEd,EM_SETSEL, -1, -1); // куда печатать SendMessage(hwndRichEd,EM_SETTEXTEX,(WPARAM) &settxt,(LPARAM) lptstrTextBuf); } else MessageBox(NULL, lptstrTextBuf, TEXT("Msg"), 0); } //______________________________________ void EntryPoint() { MSG msg; HINSTANCE hInst; RECT rect; HWND hwnd; WNDCLASSEX wc = { sizeof(wc), CS_HREDRAW | CS_VREDRAW , 0, 0, 0 , 0, 0, 0 , (HBRUSH) COLOR_WINDOWFRAME , 0 // lpszMenuName , 0 //win_Title , 0}; // выделение памяти lptstrTextBuf = (TCHAR*) HeapAlloc( GetProcessHeap(), 0, MAX_B_BUF); // lptstrTextBuf hInst = GetModuleHandle(NULL); Wout(2, TEXT("Запуск\n\n hInst=%#08X\n"), hInst); if (! LoadLibrary(TEXT("RICHED20.DLL"))) { Wout(2, TEXT("failed LoadLibrary RICHED20.DLL\n\n")); goto STOP; } Wout(0, TEXT("RICHED20.DLL loaded\n\n")); wc.hInstance = hInst; wc.lpfnWndProc = WndProc; wc.hIcon = LoadIcon(NULL, IDI_WARNING); wc.lpszClassName = TEXT("TEST"); wc.hCursor = LoadCursor(NULL, IDC_ARROW); if(!RegisterClassEx(&wc)) { Wout(2, TEXT("failed RegisterClassEx\n\n")); goto STOP; } SystemParametersInfo( SPI_GETWORKAREA, 0, &rect, 0); //---- запись в RECT размеров рабочего стола rect.left = (rect.right >>= 1); rect.bottom /= 3; rect.top = rect.bottom << 1; hwnd = CreateWindowEx( WS_EX_COMPOSITED // двойная буферизация | WS_EX_WINDOWEDGE, //WS_EX_MDICHILD, // двойная рамка wc.lpszClassName, //window class name wc.lpszClassName, //window caption WS_OVERLAPPEDWINDOW |WS_BORDER |WS_VISIBLE, //window style rect.left, // x position rect.top, // y position rect.right, // x size rect.bottom, // y size 0, //parent window handle NULL, //window menu handle hInst, //program instance handle NULL //creation parameters ); if (! hwnd) { Wout(2, TEXT("failed CreateWindowEx\n\n")); goto STOP; } { //=================== RICHEDIT ========================================== GetClientRect(hwnd, &rect);//---- запись в RECT размеров RICHEDIT hwndRichEd = CreateWindowEx( /*#if defined(UNICODE) 0,TEXT("RICHEDIT20W") #else 0,TEXT("RICHEDIT20A") #endif */ 0, RICHEDIT_CLASS// window class name ,0 // window caption ,WS_CHILD |WS_VISIBLE |WS_VSCROLL |ES_MULTILINE |ES_AUTOVSCROLL //window style , 0, 0 // x position y position , rect.right // x size , rect.bottom // y size , hwnd, 0, hInst, 0 ); if (! hwndRichEd) { Wout(2, TEXT("failed CreateWindowEx 2\n\n")); goto STOP; } SendMessage(hwndRichEd,WM_SETFOCUS,0,0); SendMessage(hwndRichEd,EM_SETBKGNDCOLOR, 0, 0xEEEEEE); } UpdateWindow(hwnd); while (GetMessage( &msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } STOP: ExitProcess( (UINT) msg.wParam ); } //______________________________________ LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_SIZE: Wout(3, TEXT("WM_SIZE\n LOWORD(lParam)=%i\n HIWORD(lParam)=%i\n\n"), LOWORD(lParam), HIWORD(lParam)); return 0; case WM_QUERYENDSESSION: case WM_DESTROY: PostQuitMessage(0); return (message == WM_QUERYENDSESSION) ? 1:0; default: return DefWindowProc(hwnd,message,wParam,lParam); } } upd// компилятор DDK + PSDK вроде как MSVC7 наверное
Большое Спасибо не сообразил даже эту SETTEXTEX перетаскивая с места на место , сломал весь мозк с этим UNICODE