Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / UNICODE в нотепаде / 6 сообщений из 6, страница 1 из 1
11.11.2004, 17:33
    #32778123
fixit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNICODE в нотепаде
Как сделать edit элемент чтобы изображал юникодные знаки примерно как в виндосовском нотепаде? Или нотепад использует ртф форматирование хитро извращенным способом? Но все равно на диск пишет только чисто "utf" байты.. хм..

Подскажите, люди добрые.

P.S. реализовать подобное надо все одно в чем: MSVC++ x или BCB x
...
Рейтинг: 0 / 0
11.11.2004, 20:41
    #32778470
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNICODE в нотепаде
0) Задать контролу интерфейс в Unicode.
Для этого надо его создать функцией CreteWindowW или CreteWindowExW .
Для контролов из comctl можно послать сообщение CCM_SETUNICODEFORMAT.
1) Поставить ему Unicode-ный шрифт. WM_SETFONT
2) Задать текст на UNICODE.
...
Рейтинг: 0 / 0
16.11.2004, 22:58
    #32785422
fixit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNICODE в нотепаде
MasterZiv0) Задать контролу интерфейс в Unicode.
Для этого надо его создать функцией CreteWindowW или CreteWindowExW .
Для контролов из comctl можно послать сообщение CCM_SETUNICODEFORMAT.
1) Поставить ему Unicode-ный шрифт. WM_SETFONT
2) Задать текст на UNICODE.


Пытался реализовать подобное в msvc6:

в prerpocessor definitions пишу _UNICODE,
в link output пишу wWinMainCRTStartup (как сказано в msdn)

теперь код:

вариант 1 (по вашему совету):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
      const WCHAR s(0x42f);
      HWND hwnd; 
    // Save the application-instance handle. 
    HINSTANCE hinstance = AfxGetApp( )->m_hInstance; 
 
    // Create the main window. 
    hwnd = CreateWindowW( _T("EDIT"),        // name of window class 
        &s,            // title-bar string 
        WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL , // top-level window 
         10 ,       // default horizontal position 
         10 ,       // default vertical position 
         100 ,       // default width 
         100 ,       // default height 
        (HWND) NULL,         // no owner window 
        (HMENU) NULL,        // use class menu 
        hinstance,           // handle to application instance 
        (LPVOID) NULL
		);      // no window-creation data 

не работает, выдает знак типа |



вариант 2:
исходя из MFC (по логике она должна линковать к CreateW если _UNICODE ?)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
	//CEdit test;
	test.Create(ES_MULTILINE | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL  , CRect( 10 , 10 , 100 , 30 ), this,  56789  );
	const WCHAR s(0x42f);

	CFont font;
	font.CreateFont(  15 ,  8 ,  0 ,  0 , FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
				OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
				DEFAULT_PITCH | FF_DONTCARE, _T("Lucida Sans Unicode") );

	test.SetFont(&font);
	test.SetWindowText(&s);

не работает, тоже выдает знак типа |




вариант 3:
тупо печатаю техт в DC

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	CPaintDC dc(this);
	const WCHAR s(0x42f);
	CFont font;

	font.CreateFont(  15 ,  8 ,  0 ,  0 , FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
				OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
				DEFAULT_PITCH | FF_DONTCARE, _T("Lucida Sans Unicode") );
	CFont* pOldFont = dc.SelectObject( &font );
	dc.TextOut(  120 ,  14 , &s,  1  );

	dc.SelectObject( pOldFont );
	font.DeleteObject();
здесь все работает, пишет заветную букву в юникоде "я"




Так какже всетаки реализовать юникод для edit контрола?
Если это все-таки можно как-то сделать через CreateWindowW, то как потом привязать hwnd к CEdit чтобы можно было пользовать стд. методы например Copy, Paste, SetSel, Undo..?
...
Рейтинг: 0 / 0
17.11.2004, 10:32
    #32785910
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNICODE в нотепаде
А можешь код заслать ?
...
Рейтинг: 0 / 0
17.11.2004, 12:15
    #32786353
fixit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNICODE в нотепаде
MasterZivА можешь код заслать ?

а код собственно весь здесь.

Создаю проект для MFC exe на базе диалогового окна.
В project settings прописываю _UNICODE и wWinMainCRTStartup,
В CMyDlg обявляю "CEdit test;"
В методе CMyDlg::OnInitDialog() пишу пример кода 1 или 2
В методе CМyDlg::OnPaint() пишу пример 3
...
Рейтинг: 0 / 0
18.11.2004, 19:35
    #32790144
fixit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNICODE в нотепаде
Неужели никто не знает как в edit элемент написать програмно юникодный знак (используя его код например из таблицы "character map")?
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / UNICODE в нотепаде / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]