CreateWindwoEsW name

Тема в разделе "WASM.WIN32", создана пользователем SolidCode, 16 апр 2005.

  1. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    У меня проблема при создании Unicode окна. Я передаю юникодовское название окна, а оно получается лишь с первой буквой. Как будто строку интерпретируют как ANSI.

    Кто-нибудь встречался с этой проблемой?


    Код (Text):
    1.  
    2. .data
    3.     AppName     dw "A","u","t","o","Q"," ","2",".","0",0
    4.     szEditClass dw "A","u","t","o","Q","E","d","i","t","o","r","C","l","a","s","s",0
    5. .code
    6.         zeroReg ecx
    7.         invoke  CreateWindowExW,WS_EX_CONTROLPARENT or WS_EX_ACCEPTFILES or WS_EX_APPWINDOW or WS_EX_WINDOWEDGE,\  ;
    8.                 offset szEditClass,offset AppName,\
    9.                 WS_OVERLAPPEDWINDOW or WS_VISIBLE or WS_CLIPCHILDREN or WS_CLIPSIBLINGS,\ ;
    10.                 ecx,ecx,640,480,ecx,ecx,hInstance,ecx
    11.  
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Хм .. попомему надо эту строку еще инициализировать ..

    RtlInitUnicodeString()
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    CreateWindowsExW не использует UNICODE_STRING. А использует PWChar.

    А ты проинициализировал класс?
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    А где вызов RegisterClassW()?
     
  5. Programmer PRL

    Programmer PRL New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    5
    Адрес:
    Russia
    Если я ничего не попутал, надо включить _UNICODE

    #define _UNICODE

    иначе TCHAR интерпритируется как char.
     
  6. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    TermoSINteZ

    RtlInitUnicodeString() есть лишь с вынь2К. А как жить в Вынь НТ 4.0?



    n0name

    Объясните тёмному разницу между UNICODE_STRING и PWChar. Я думал это одно и тоже. А что значит инициализировать класс?



    AsmGuru62

    RegisterClassW() выполняется выше в функции InitApp. Регистрация проходит нормально.



    Хотя в C++ функции RegisterClassExW надо скормить юникодовский вариант, но размер обоих одинаковый. Главное, чтобы строковые указатели показывали на юникодовские строки.



    Вот в приложенном файле RADASM проект. Также длина имени файла не превышает первый символ.



    Лирическое отступление:

    Другое дело с OSVERSIONINFOW. Здесь размер разный. Я это не сразу просёк. Вот объявление структуры:
    Код (Text):
    1. ;because official windows.inc does not have this structure
    2. OSVERSIONINFOW STRUCT
    3.   dwOSVersionInfoSize   DWORD      ?
    4.   dwMajorVersion        DWORD      ?
    5.   dwMinorVersion        DWORD      ?
    6.   dwBuildNumber         DWORD      ?
    7.   dwPlatformId          DWORD      ?
    8.   szCSDVersion          WORD 128 dup (?)
    9. OSVERSIONINFOW ENDS
    [​IMG] 828134774__textenc.zip
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    >>Объясните тёмному разницу между UNICODE_STRING и PWChar. Я думал это одно и тоже. А что значит инициализировать класс?

    Ну UNICODE_STRING это структура:

    UNICODE_STRING STRUCT

    wLength DWORD ?

    wMaxLength DWORD ?

    pwString DWORD ?

    UNICODE_STRING ENDS



    А PWChar это указатель на Unicode-строку.



    Иинициализировать класс. ну в моём понимании это заполнить структуру WNDCLASSEXW и вызвать RegisterClassW.



    Насчет твоего вопроса. вместо dw используй db в имени окна. IsWindowUnicode смотрит на имя класса.
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    SolidCode

    Замени DefWindowProc на DefWindowProcW и будет тебе счастье.
     
  9. SolidCode

    SolidCode New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2002
    Сообщения:
    162
    Адрес:
    Kazakhstan
    q_q

    Большое спасибо.

    Вот так всегда. Вся проблема в одной лишь маленькой дурацкой букве. Просто нужен был свежий взгляд.