Сейчас на форуме: zds, tyns777, JustLife, 2nd, morgot, Rio, CDK123 (+4 невидимых)

 eXeL@B —› Программирование —› ES_PASSWORD
Посл.ответ Сообщение


Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 07 октября 2009 03:33
· Личное сообщение · #1

В общем столкнулся с интересной проблемой...
А именно... как отобразить Юникод символ в едит контроле?
Создаю едит контрол с стилем ES_PASSWORD...
В моей программе я сделал так... можно отображать вводимый пароль а можно скрыть...
Т.е. отображаем вводимые символы так -
Code:
  1. invoke SendMessage,hPASS,EM_SETPASSWORDCHAR,0,NULL


При этом в едит контроле для скрытия символов используется не (*) звездочка а (●) т.е. BLACK CIRCLE (U+25CF)
Вопрос - как передать этот же Юникод символ обратно в контрол?
Понятно что через SendMessage и EM_SETPASSWORDCHAR, но что у нас должно быть при этом в wParam?

-----
aLL rIGHTS rEVERSED!




Ранг: 39.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 07 октября 2009 05:42
· Личное сообщение · #2

DaRKSiDE пишет:
но что у нас должно быть при этом в wParam?


em_SetPasswordChar

Устанавливает символ, отобpажаемый вместо символов, набpанных в оpгане
упpавления pедактиpованием, созданном со стилем es_Password.
Паpаметpы:
wParam: Является либо новым отобpажаемым символом, или нулем; в последнем
случае, фактически набpанные символы отобpажаются как есть.
lParam: Не используется.
Возвpащаемое значение: Не используется.


http://develab.narod.ru/api/32.htm#5
http://msdn.microsoft.com/en-us/library/bb761653%28VS.85%29.aspx




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 07 октября 2009 06:46
· Личное сообщение · #3

Bonez92

Спасибо, но это я и ранее знал...
Я имел ввиду то что Bonez92 пишет:отобpажаемым символом в данном случае есть Юникод символ, а он у нас не однобайтовый ... Так вот... как передать в функцию двух и более байтовый код???!!!
В MSDN-е написано -

Windows XP:
If an edit control is from user32.dll, an asterisk is the default character for the ES_PASSWORD style. However, if an edit control is from comctl32.dll version 6, a black circle is the default character for the ES_PASSWORD style. Note that comctl32.dll version 6 is not redistributable but is included with Windows XP or later. To use comctl32.dll version 6, specify it in a manifest. For more information on manifests, see Enabling Visual Styles.


Так вот в Enabling Visual Styles
нет примеров как это сделать...

-----
aLL rIGHTS rEVERSED!




Ранг: 39.6 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 07 октября 2009 08:12
· Личное сообщение · #4

Code:
  1. invoke SendMessage,hPASS,EM_SETPASSWORDCHAR,25CFh,NULL

Я, к сожалению, не могу создать едит контрол с поддержкой Unicode. Но на ANSI код выше срабатывает (Хотя выдает два символа на один).

Кстати, я вообще правильно понял вопрос?




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 07 октября 2009 18:59
· Личное сообщение · #5

Bonez92 пишет:
Но на ANSI код выше срабатывает (Хотя выдает два символа на один).

ну если это можно считать что срабатывает...
Тот пример что ты указал, я уже делал...
Мне нужно не 2 символа а один ●

-----
aLL rIGHTS rEVERSED!





Ранг: 111.1 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 07 октября 2009 19:45
· Личное сообщение · #6

Code:
  1. BOOL SetEditPassword(HWND hWndEdit,BOOL bDeleteOldFont)
  2. {
  3.     LOGFONT lf;
  4.     HFONT hFont,hNewFont;
  5.     DWORD dwStyle;
  6.     BOOL bSysFont = FALSE;
  7.  
  8.     if (hWndEdit == NULL)
  9.         return FALSE;
  10.  
  11.     dwStyle = GetWindowLongPtr(hWndEdit,GWL_STYLE);
  12.     if (~dwStyle & ES_PASSWORD )
  13.        return FALSE;
  14.     
  15.     hFont = (HFONT)SendMessage( hWndEdit,(UINT)WM_GETFONT,(WPARAM)0,(LPARAM)0);
  16.     
  17.     if (hFont == NULL)
  18.          hFont = (HFONT)GetStockObject(SYSTEM_FONT);
  19.  
  20.     GetObject(hFont,sizeof(LOGFONT),&lf);
  21.     
  22.     lf.lfCharSet = SYMBOL_CHARSET;
  23.     lf.lfWeight = FW_NORMAL;
  24.     lf.lfHeight = 10;
  25.     lstrcpyn(lf.lfFaceName,"Wingdings",LF_FACESIZE);
  26.  
  27.     hNewFont = CreateFontIndirect(&lf);
  28.     if (hNewFont == NULL)
  29.         return FALSE;
  30.     
  31.     SendMessage( hWndEdit,(UINT)WM_SETFONT,(WPARAM)hNewFont,(LPARAM)TRUE);
  32.     SendMessage( hWndEdit,(UINT) EM_SETPASSWORDCHAR,(WPARAM)'l',(LPARAM)0);
  33.    
  34.     if (bDeleteOldFont)
  35.         DeleteObject(hFont);
  36.  
  37.     InvalidateRect(hWndEdit,NULL,TRUE);
  38.     return TRUE;
  39. }

Может это поможет

-----
The truth is out of there...



 eXeL@B —› Программирование —› ES_PASSWORD
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати