Страница: 1 | 2 |
Вопрос: Субкласнутый TextBox - борьба за точку
Добавлено: 25.02.06 11:23
Автор вопроса: XPEHOMETP
Ответы
Всего ответов: 17
Номер ответа: 16
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #16
Добавлено: 28.02.06 13:32
потому что я СРАЗУ фокус на текстбокс прописал
Нет, не поэтому, я тоже сделал сразу установку фокуса на текстбокс.
На pb нету исходника, только асмовый, но тут с комментариями нарисовал, думаю разберешься
EditProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL buffer[256] :BYTE
.if (uMsg==WM_SETFOCUS)
invoke SetWindowText, hWin, addr szPoint ;записываем точку в текстбокс
invoke SendMessage, hWin, EM_SETSEL, 1, 1 ;устанавливаем курсор на позицию 1
.endif
;необработанные сообщения передаём в дефолтную процедуру
invoke CallWindowProc, prevProc, hWin, uMsg, wParam, lParam
ret
EditProc endp
;########################################################################
DlgProc proc uses ebx hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.if eax==WM_INITDIALOG ;инициализация диалога
invoke GetDlgItem, hWin, 1001
mov ebx,eax ;определяем hWnd текстбокса по его ctlID
invoke SetWindowLong, ebx, GWL_WNDPROC, addr EditProc ;устанавливаем сабклассинг-процедуру для текстбокса
mov prevProc,eax ;запоминаем старый адрес в глобальной переменной
invoke SetFocus, ebx ;устанавливаем фокус на текстбокс
.elseif eax==WM_CLOSE
invoke EndDialog,hWin,0
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
DlgProc endp
Номер ответа: 17
Автор ответа:
XPEHOMETP
Вопросов: 3
Ответов: 30
Профиль | | #17
Добавлено: 01.03.06 09:55
До меня вдруг доперло, почему не прокатил самый первый вариант: с попыткой приставить точку слева от введенного текста. Просто когда обрабатывается первое сообщение %WM_CHAR, Текстбокс еще пустой! Туда просто ставится точка, а курсор остается на прежнем месте... В общем, я переделал по-простому: точка изначально не ставится, никаких посланий не отправляется, юзер что-то набирает, а при нажатии кнопки ОК проверяется, есть ли в наборе точка. Если нет, она приставляется слева. И все. Меня так больше устраивает: можно набрать что-нибудь вроде tyu.tух, тогда при приписывании модифицируется и расширение, и имя файла. Появляется такая дополнительная функциональность. А с посыланием мессаг потом как-нибудь разберусь. Спасибо за помощь!