Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Элемент с двумя стрелочками справа, и текстовым полем слева 
V
    Опции темы
nns2009
Дата 9.3.2009, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



В моём диалоговом окне пользователь должен будет выбирать ширину и высоту таблицы(естественно целочисленную).
Значит моё диалоговое окно должно содержать:
1. Кнопки "OK", "Отмена".
2. Два элемента управления(незнаю как называются и не смог найти в Toolbox), у которых слева - поле для ввода чисел, а справа две стрелочки(вверх и вниз) для инкремента и декремента. Думаю вы поняли, о чём я.

Я нашёл в Toolbox элемент Spin Control(просто две стрелки), но не нашёл полный элемент управления, подскажите, где его можно взять? (или придётся реализовывать вручную?)
PM MAIL   Вверх
GoldFinch
Дата 9.3.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



полный элемент - комбинация EDIT и Spin Control
PM MAIL ICQ   Вверх
Dem_max
Дата 9.3.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



поставь едиту еще стиль ES_NUMBER


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
586
Дата 9.3.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Чтобы объединить EDIT и UpDown Control нужно второму послать сообщение UDM_SETBUDDY.
Автоматическое объединение: стиль UDS_AUTOBUDDY.
Подробности в MSDN: Creating Up-Down Controls
PM   Вверх
nns2009
Дата 9.3.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Попробовал код набросать, вместе с отображением диалогового окна. Он компилируется, но после запуска сразу закрывается. В чём проблема? или файл ресурсов тоже выложить?
Код

#include "stdafx.h"
//#include "resourse.h"
#include "Dialogs.h"
#include <windows.h>
#include <commctrl.h>

#define MAX_LOADSTRING 100

BOOL CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)WndProc);
    return ret;
}

BOOL CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND we = GetDlgItem(hWnd, IDC_WIDTH);
    HWND ws = GetDlgItem(hWnd, IDC_SPIN_WIDTH);
    HWND he = GetDlgItem(hWnd, IDC_HEIGHT);
    HWND hs = GetDlgItem(hWnd, IDC_SPIN_HEIGHT);

    switch (message)
    {
    case WM_INITDIALOG:
        SendMessage(we, UDM_SETBUDDY, (WPARAM)ws, 0);
        SendMessage(he, UDM_SETBUDDY, (WPARAM)hs, 0);
        break;
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDOK:
            EndDialog(hWnd, 1);
            break;
        case IDM_EXIT:
            EndDialog(hWnd, 0);
            break;
        }
        break;
    case WM_CLOSE:
        EndDialog(hWnd, 0);
        break;
    }
    return FALSE;
}

PM MAIL   Вверх
586
Дата 9.3.2009, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    InitCommonControls();
    int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)WndProc);
    return ret;
}

PM   Вверх
nns2009
Дата 10.3.2009, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Теперь не компилируется:
------ Build started: Project: Dialogs, Configuration: Debug Win32 ------
Linking...
Dialogs.obj : error LNK2019: unresolved external symbol __imp__InitCommonControls@0 referenced in function _wWinMain@16
E:\Program Files\Visual Studio 2008\Projects\C++\Dialogs\Debug\Dialogs.exe : fatal error LNK1120: 1 unresolved externals
Build log was saved at "file://e:\Program Files\Visual Studio 2008\Projects\C++\Dialogs\Dialogs\Debug\BuildLog.htm"
Dialogs - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Вроде надо какой-то lib-файл подключить, но какой?
PM MAIL   Вверх
586
Дата 10.3.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Это в гугле хорошо ищется: http://www.google.ru/search?hl=ru&q=un...+Google&lr=
Код
#include <windows.h>
#include <commctrl.h>

#pragma comment (lib, "comctl32.lib")

//...


Это сообщение отредактировал(а) 586 - 10.3.2009, 21:47
PM   Вверх
nns2009
Дата 11.3.2009, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Поставил в свойствах проекта, чтобы он эту библиотеку подключил, теперь компилируется, но при нажатии на стрелки, единственное что происходит это перевод фокуса на текстовое поле, а значения не меняются. Почему ?
Код

#include "stdafx.h"
//#include "resourse.h"
#include "Dialogs.h"
#include <windows.h>
#include <commctrl.h>
//pragma comment (lib, "comctl32.lib")
#define MAX_LOADSTRING 100

BOOL CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    InitCommonControls();
    int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)WndProc);
    return ret;
}

BOOL CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND we = GetDlgItem(hWnd, IDC_WIDTH);
    HWND ws = GetDlgItem(hWnd, IDC_SPIN_WIDTH);
    HWND he = GetDlgItem(hWnd, IDC_HEIGHT);
    HWND hs = GetDlgItem(hWnd, IDC_SPIN_HEIGHT);

    switch (message)
    {
    case WM_INITDIALOG:
        SetWindowText(we, "24");
        SetWindowText(he, "7");
        SendMessage(ws, UDM_SETBUDDY, (WPARAM)we, 0);
        SendMessage(hs, UDM_SETBUDDY, (WPARAM)he, 0);
        break;
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case IDOK:
            EndDialog(hWnd, 1);
            break;
        case IDCANCEL:
            EndDialog(hWnd, 0);
            break;
        }
        break;
    case WM_CLOSE:
        EndDialog(hWnd, 0);
        break;
    }
    return FALSE;
}

PM MAIL   Вверх
Dem_max
Дата 11.3.2009, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



сделай в диалоге в ресурсе так
 EDITTEXT 404, 90, 27, 50, 12, ES_AUTOHSCROLL | ES_NUMBER
 CONTROL "Spin", 405, "msctls_updown32",  0x000000B7, 140, 26, 11, 14
и у тебя контрол со стрелочками сам будет пристыковываться, не надо программно заморачиваться.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
nns2009
Дата 11.3.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Цитата(Dem_max @  11.3.2009,  19:06 Найти цитируемый пост)
сделай в диалоге в ресурсе так
 EDITTEXT 404, 90, 27, 50, 12, ES_AUTOHSCROLL | ES_NUMBER
 CONTROL "Spin", 405, "msctls_updown32",  0x000000B7, 140, 26, 11, 14
и у тебя контрол со стрелочками сам будет пристыковываться, не надо программно заморачиваться. 

Спасибо, всё заработало так, как нужно за исключением двух вещей:
1. Максимальное значение - 100.
2. Стрелки перепутанны местами.
Как это исправить?
PM MAIL   Вверх
Dem_max
Дата 11.3.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



На счет перепутанных стрелок ничего не скажу, не должно быть так
а как задать параметры вот
Код

   SendMessage(GetDlgItem(hWndDlg, IDC_UDDOWN), UDM_SETRANGE32, 50, 5000); // Устанавливаем пределы  50 до 5000 
   SendMessage(GetDlgItem(hWndDlg, IDC_UDDOWN), UDM_SETPOS32, 0, 200); // Устанавливаем тпозицию = 200



--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
nns2009
Дата 11.3.2009, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Цитата(Dem_max @  11.3.2009,  19:35 Найти цитируемый пост)
   SendMessage(GetDlgItem(hWndDlg, IDC_UDDOWN), UDM_SETRANGE32, 50, 5000); // Устанавливаем пределы  50 до 5000 
   SendMessage(GetDlgItem(hWndDlg, IDC_UDDOWN), UDM_SETPOS32, 0, 200); // Устанавливаем тпозицию = 200

Это помогло, а стрелки после этого(или по какой-то другой причине) сами начали нормально работать.
Всем Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.