ANDLL писал(а):Хы. Если заменить деларацию на W, то действительно, в блокноте отображается то, что нужно.
В MessageBox'е - первый символ заменяется на квадратик, остальные отображаются верно(возможно, связанно со системным шрифтом для Message'а).
У меня всё отображается совершенно нормально.
Только что проверил в Win2000 - там всё так же.
Проверь декларацию.
ANDLL писал(а):Если устанавливать текст(С помощью SetWindowTextW) на новосозданном Edit'е, то отображается ерунда. Видимо связанно с тем, что шрифт, выбранный по умолчанию не поддерживает эти символы.
Создавать окно тоже надо через CreateWindowExW:
- Код: Выделить всё
Option Explicit
Private Declare Function CreateWindowExW Lib "user32" (ByVal dwExStyle As Long, ByVal lpClassName As Long, ByVal lpWindowName As Long, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function SetWindowTextW Lib "user32" (ByVal hwnd As Long, ByVal lpString As Long) As Long
Private Const WS_VISIBLE = &H10000000
Private Const WS_CHILD = &H40000000
Private Const WS_BORDER = &H800000
Private Const WM_SETFONT = &H30
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const DEFAULT_GUI_FONT = 17
Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
Private Sub Form_Load()
Dim hwndEdit As Long
hwndEdit = CreateWindowExW(0, StrPtr("Edit"), StrPtr(""), WS_VISIBLE Or WS_CHILD Or WS_BORDER, 10, 10, 300, 20, Me.hwnd, 0, App.hInstance, &H0)
'SendMessage hwndEdit, WM_SETFONT, GetStockObject(DEFAULT_GUI_FONT), ByVal 0&
SetWindowTextW hwndEdit, StrPtr(ChrW(&H2660) & ChrW(&HBF) & ChrW(&H203C))
End Sub
Тогда вместо первого символа будет рисоваться квадратик - потому что такого символа нет в шрифте System.
Когда в шрифте какого-то символа нехватает, рисуется именно квадратик, а не какой-то левый символ. Всюду, где у тебя символы меняются на левые, можешь заранее знать, что шрифт не при чём.
Если раскомментировать SendMessage, то шрифт поменяется на MS Sans Serif, и все символы отрисуются правильно.
ANDLL писал(а):tyomitch писал(а):Э... А что я не так сказал?
Будто я для тебя сочиняю головоломки, что бы ты их разгадывал. Если считаешь вопросы смешными, неадекватными, элементарными, в-общем не заслыживающими твое святейшее внимание, просто не отвечай
Мне казалось, что я ответил конкретно на заданные вопросы и привёл работающий код - в отличие от остальных отвечавших
Чем я тебя обидел-то? Где ты увидел, что я счёл вопросы "смешными, неадекватными, элементарными"??