Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Winapi. Проблема с UpDown Control, не меняется содержимое Edit / 6 сообщений из 6, страница 1 из 1
12.06.2014, 09:48
    #38668301
eralex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Winapi. Проблема с UpDown Control, не меняется содержимое Edit
Пытаюсь создать на winapi простейшее приложение с элементами UpDown Control. Проблема в том, что в прикрученном к UpDown Edit-те не меняется значение, вообще не реагирует на нажатие стрелок вверх-вниз, только выделяет значение. Сам я новичёк в с++, не судите строго. Среда разработки: CodeBlocks.

Вот часть кода:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
//Фyнкция окна, обpабатывающая сообщения
LRESULT WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{       switch(Message)
        { HANDLE_hwnd, WM_CREATE, Lab2_OnCreate;
          HANDLE_hwnd, WM_DESTROY, Lab2_OnDestroy;
          HANDLE_hwnd, WM_COMMAND, Lab2_OnCommand;
          HANDLE_hwnd, WM_NOTIFY, Lab2_OnNotify;
          HANDLE_hwnd, WM_VSCROLL, OnHScroll;
          default:return Lab2_DefProc(hwnd,Message, wParam, lParam);
        }
}



//Фyнкция обpаботки сообщения WM_CREATE
BOOL Lab2_OnCreate(HWND hwnd, CREATESTRUCT FAR* lpCreateStruct)
{
  InitCommonControls();

..................

hEdit1 = CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | ES_LEFT | WS_BORDER | ES_AUTOHSCROLL,
                   30,250,50,25, hwnd, HMENU(IDC_EDIT1), hInstance, NULL);

// Создаем орган управления Up-Down и подключаем его к редактору текста. Задаем начальное
  // и конечное значение, инициализируем редактор текста

  hwndUpDown1 = CreateUpDownControl(
    WS_CHILD | WS_BORDER | WS_VISIBLE |
    UDS_WRAP | UDS_ARROWKEYS | UDS_ALIGNRIGHT |
    UDS_SETBUDDYINT,
    0, 0, 0, 0, hwnd, IDC_UPDOWN1, hInstance,
    hEdit1,10, 1, 1);



Что тут нехватает?

Пробовал и по другому:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  hwndUpDown1 = CreateUpDownControl (
  WS_CHILD | WS_BORDER | WS_VISIBLE |
  UDS_ARROWKEYS | UDS_ALIGNRIGHT |UDS_SETBUDDYINT, 0, 0, 0, 0, hwnd, IDC_UPDOWN1, hInstance,
  hEdit1,100, 1, 1);

  hEdit1 = CreateWindowEx (WS_EX_CLIENTEDGE, WC_EDIT, NULL,  WS_VISIBLE | WS_CHILD | WS_BORDER |
                ES_RIGHT | ES_NUMBER, 30,250,50,25, hwnd, (HMENU) IDC_EDIT1, hInstance, NULL);

  hwndUpDown1 = CreateWindowEx(0,UPDOWN_CLASS,  NULL,   WS_VISIBLE | WS_CHILD |
                UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT | UDS_AUTOBUDDY,
                              0, 0, 0, 0,  hwnd, (HMENU)IDC_UPDOWN1,   hInstance,   NULL);

   SendMessage(hwndUpDown1, UDM_SETBUDDY, (LONG)hEdit1, 0);
   SendMessage(hwndUpDown1, UDM_SETRANGE, 0, MAKELPARAM(100, 1));



Тоже самое.
...
Рейтинг: 0 / 0
12.06.2014, 11:16
    #38668328
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Winapi. Проблема с UpDown Control, не меняется содержимое Edit
eralexЧто тут нехватает?
Я бы предположил, что тут обработка WM_VSCROLL лишняя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
12.06.2014, 11:32
    #38668336
eralex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Winapi. Проблема с UpDown Control, не меняется содержимое Edit
Убрал обработку WM_VSCROLL - ничего не изменилось
...
Рейтинг: 0 / 0
12.06.2014, 11:59
    #38668355
eralex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Winapi. Проблема с UpDown Control, не меняется содержимое Edit
Нашёл подобную проблему здесь на форуме, но что-то мозгов мне не хватает, как мне исправить свой код.
Вот тема: http://www.sql.ru/forum/677556/updown-control-neponyatki
...
Рейтинг: 0 / 0
16.06.2014, 07:59
    #38669991
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Winapi. Проблема с UpDown Control, не меняется содержимое Edit
eralex,

стиль UDS_AUTOBUDDY убери для начала...
...
Рейтинг: 0 / 0
17.06.2014, 04:04
    #38671138
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Winapi. Проблема с UpDown Control, не меняется содержимое Edit
eralex,

Разбирать неохота.
Но на тебе мой кусок кода (извини, у меня все эти вещи на VB6).
Мой точно рабочий.

Picture_hEditRetryNumFix -контрол PictureBox на форме FormRndSetup(она же Me).
Я вписываю Edit ровно по размеру PictureBox
Присобаченный UpDown "вписан" в левую часть Edit.
Фишки с PictureBox и сабклассигом мне понадобились для того чтоб UpDown (вернее Edit) вписался в последовательность Alt+Tab вместе с имеющимися на форме VB-контролами.
Но ты главное все стили скопируй точно также.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
  Dim fnt As IFont
  Const UPDOWNSTYLE = WS_CHILDWINDOW Or WS_VISIBLE Or WS_GROUP Or _
                              UDS_SETBUDDYINT Or UDS_ALIGNRIGHT Or _
                              UDS_ARROWKEYS Or UDS_NOTHOUSANDS 'Or UDS_AUTOBUDDY
                              
  Set fnt = Me.Font

  'создаем hEditRetryNumFix через API (только ввод цифр)
  hEditRetryNumFix = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "", _
   ES_AUTOHSCROLL Or ES_NUMBER Or WS_VISIBLE Or WS_CHILD, _
   0, 0, Picture_hEditRetryNumFix.Width, Picture_hEditRetryNumFix.Height, _
   Picture_hEditRetryNumFix.hwnd, 0&, App.hInstance, 0&)
  SendMessage hEditRetryNumFix, WM_SETFONT, fnt.hFont, ByVal 0
  Edit_SetMaxLength hEditRetryNumFix, 2 'MaxLength=2
  'пристыковка UpDown к существующему hEditRetryNumFix
  hWndUpDown_to_RetryNumFix_rndSetup = CreateUpDownControl(UPDOWNSTYLE, 0, 0, 0, 0, _
   Picture_hEditRetryNumFix.hwnd, 1, _
   App.hInstance, hEditRetryNumFix, 99, 0, _
   3)
  'Enabled=false(default)
  Call EnableWindow(hEditRetryNumFix, 0)
  Call EnableWindow(hWndUpDown_to_RetryNumFix_rndSetup, 1) 'надо обязательно передернуть enable->disable
  Call EnableWindow(hWndUpDown_to_RetryNumFix_rndSetup, 0)
  OldPictureHEditRetryNumFixWindowProc = SetWindowLong( _
   Picture_hEditRetryNumFix.hwnd, GWL_WNDPROC, _
   AddressOf NewPictureHEditRetryNumFixWindowProc)
  '===============================================================================
Public Sub Edit_SetMaxLength(hwnd As Long, ByVal lMaxLength As Long)
  SendMessageLong hwnd, EM_LIMITTEXT, lMaxLength, ByVal 0&
End Sub



Еще вот сабклассинг контейнера, не уверен что тебе это нужно:
'для событий Picture_hEditRetryNumFix
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Function NewPictureHEditRetryNumFixWindowProc _
 (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 
  Dim uEN As Long
 
  Select Case Msg
    Case WM_COMMAND
      uEN = HIWORD(VarPtr(ByVal wParam&))
      Select Case uEN
        Case EN_SETFOCUS
          Call SendMessage(FormRndSetup.Picture_hEditRetryNumFix.hwnd, WM_SETFOCUS, 0&, 0&)
        Case Else
      End Select
    Case Else
  End Select
 
  NewPictureHEditRetryNumFixWindowProc = CallWindowProc( _
   OldPictureHEditRetryNumFixWindowProc, hwnd, Msg, wParam, _
   lParam)
End Function
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Winapi. Проблема с UpDown Control, не меняется содержимое Edit / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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