Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 15.09.2012, 17:24   #11
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Так же пишите, что именно нужно продемонстрировать дополнительно

что-нибудь посвежее чем со времен динозавров((:
например Ribbons, Win8 Transitions, ...
Спасибо за замечание! Это для меня новая информация. После изучения GUI на WinAPI в самый раз.

Последний раз редактировалось 8Observer8; 15.09.2012 в 17:31.
8Observer8 вне форума   Ответить с цитированием
Старый 15.09.2012, 19:18   #12
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Static Text на диалоговом окне:


Код:

#include <windows.h>
#include <tchar.h>

#define IDD_DIALOG1 100

INT_PTR CALLBACK DialogProc(HWND hwndDlg,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam);

LPCTSTR DlgName = MAKEINTRESOURCE(IDD_DIALOG1);

int WINAPI _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR lpCmdLine,
                     int nCmdShow)
{
    DialogBoxParam(hInstance, DlgName, NULL, DialogProc, (LPARAM) NULL);

    return TRUE;
}

INT_PTR CALLBACK DialogProc(HWND hWnd,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam)
{
    switch(uMsg) {
    case WM_CLOSE:
        EndDialog(hWnd, 0);
        break;
    default:
        return FALSE;
    }

    return TRUE;
}

8Observer8 вне форума   Ответить с цитированием
Старый 15.09.2012, 19:29   #13
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Сложение двух положительных целых чисел.


Краткое описание:

- на диалоговом окне расположены три вида элементов пользовательского интерфейса: Edit Control, Button, Static Text;
- содержимое Edit'ов - положительных целые числа;
- при вводе символа не являющегося цифрой, выводится сообщение о некорректных входных данных. Подробнее: http://www.programmersforum.ru/showp...7&postcount=18
- поля ввода ограничены семью символами:
Код:

SendMessage(hEdit1, EM_LIMITTEXT, 7, 0);
SendMessage(hEdit2, EM_LIMITTEXT, 7, 0);

- числа прижаты к правому краю Edit'ов (для этого в редакторе ресурсов выделяем все три Edit'а --> на панели "Properties" в поле "Enter search here" начинаем вводить "align" --> выбираем в поле "Align Text" значение "Right")

Код:

#include <windows.h>
#include <tchar.h>

#define IDD_DIALOG1    100

INT_PTR CALLBACK DialogProc(HWND hwndDlg,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam);

INT_PTR CALLBACK EditWndProc(HWND hEdit,
                             UINT uMsg,
                             WPARAM wParam,
                             LPARAM lParam );

LPCTSTR DlgName = MAKEINTRESOURCE(IDD_DIALOG1);

int WINAPI _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR lpCmdLine,
                     int nCmdShow)
{
    DialogBoxParam(hInstance, DlgName, NULL, DialogProc, (LPARAM) NULL);

    return TRUE;
}

#define IDC_EDIT1      3000
#define IDC_EDIT2      3001
#define IDC_EDIT3      3002
#define IDC_BUTTON1    3003
#define BSIZE          100

TCHAR buf[BSIZE];
unsigned int a;
unsigned int b;
unsigned int result;
long OldWndProc;
HWND hEdit1;
HWND hEdit2;
HWND hDlg;

INT_PTR CALLBACK DialogProc(HWND hwndDlg,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam)
{
    switch(uMsg) {
    case WM_INITDIALOG:
        hDlg = hwndDlg;
        SetDlgItemText(hwndDlg, IDC_EDIT1, _T("0"));
        SetDlgItemText(hwndDlg, IDC_EDIT2, _T("0"));
        SetDlgItemText(hwndDlg, IDC_EDIT3, _T("0"));

        hEdit1 = GetDlgItem(hwndDlg, IDC_EDIT1);
        hEdit2 = GetDlgItem(hwndDlg, IDC_EDIT2);

        OldWndProc = SetWindowLong(hEdit1, GWL_WNDPROC, (LONG) EditWndProc);
        SetWindowLong(hEdit2, GWL_WNDPROC, (LONG) EditWndProc);

        SendMessage(hEdit1, EM_LIMITTEXT, 7, 0);
        SendMessage(hEdit2, EM_LIMITTEXT, 7, 0);
        break;
    case WM_COMMAND:
        if (LOWORD(wParam) == IDC_BUTTON1) {
            GetDlgItemText(hwndDlg, IDC_EDIT1, buf, BSIZE);
            a = _tstoi(buf);
            GetDlgItemText(hwndDlg, IDC_EDIT2, buf, BSIZE);
            b = _tstoi(buf);
            result = a + b;
            wsprintf(buf, _T("%u"), result);
            SetDlgItemText(hwndDlg, IDC_EDIT3, buf);
        }
        break;
    case WM_CLOSE:
        EndDialog(hwndDlg, 0);
        break;
    default:
        return FALSE;
    }

    return TRUE;
}

INT_PTR CALLBACK EditWndProc(HWND hEdit,
                             UINT uMsg,
                             WPARAM wParam,
                             LPARAM lParam)
{
    switch(uMsg) {
    case WM_CHAR:
        if (LOWORD(wParam) != VK_BACK && (LOWORD(wParam) < '0' || '9' < LOWORD(wParam))) {
            MessageBox(hDlg, _T("Write only numbers"), _T("Warning"), 0);
            return 0;
        }
        break;
    }
    return CallWindowProc((WNDPROC) OldWndProc, hEdit, uMsg, wParam, lParam);
}

Примечания.
1. Для выравнивания элементов пользовательского интерфейса на панели инструментов есть соответствующие кнопки. Можно выравнивать группу по центру (как по вертикали, так и по горизонтали). Можно выравнивать относительно одного из элементов, того который выделяется последним. Относительно выбранного элемента можно выравнивать по его центру остальные, а так же по его левому или правому краю. Выделяются элементы последовательно с помощью удержания Ctrl и кликанья мышью. Выделенные элементы можно сделать одинаковыми как по ширине, так по высоте и по общему размеру.
2. В файлах "main.c" и "*.rc" нужно определить:
Код:

#define IDC_EDIT1      3000
#define IDC_EDIT2      3001
#define IDC_EDIT3      3002
#define IDC_BUTTON1    3003


Последний раз редактировалось 8Observer8; 15.09.2012 в 19:37.
8Observer8 вне форума   Ответить с цитированием
Старый 15.09.2012, 19:47   #14
pavelnt
 
Регистрация: 01.09.2011
Сообщений: 5
Репутация: 10
По умолчанию

Продолжайте в том же духе. Никто не спорит, что WinAPI довольно древний и мало что сейчас пишется на чистом WinAPI, но разработчику нужно его знать и понимать как это работает для понимаю всего происходящего в Windows.
Если это возможно, не могли бы Вы в местах где это необходимо рассписывать более подробно или вставлять комментарии в код.
pavelnt вне форума   Ответить с цитированием
Старый 17.09.2012, 15:26   #15
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Хорошо, буду писать подробнее, на сколько у меня получится.

Появилась идея: сделать каждое сообщение самостоятельным, то есть убрать зависимость сообщений друг от друга. Я повторяющиеся действия уберу в отдельные сообщения и буду давать ссылки на эти сообщения. Таким образом, каждый демонстрационный пример можно будет слепить с нуля, как пирожок, следуя инструкциям. Имея "Содержание" можно будет добраться до любой информации.

Итак, поехали!
8Observer8 вне форума   Ответить с цитированием
Старый 17.09.2012, 15:27   #16
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Cкачать и установить инструментарий.

ResEdit - http://www.resedit.net/
Visual Studio 2008 Express Edition - http://www.microsoft.com/ru-ru/downl....aspx?id=20682
Windows® Platform SDK - http://www.microsoft.com/en-us/downl...s.aspx?id=3138
8Observer8 вне форума   Ответить с цитированием
Старый 17.09.2012, 15:28   #17
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Cоздать проект Visual 2008.

- запускаем Visual 2008

- (на панели меню выбираем "Файл" --> Создать) (или Ctrl+Shift+N) --> выбираем тип проекта: Win32 --> выбираем шаблоны: Win32 --> вводим имя проекта --> выбираем расположение --> убираем галочку "Создать каталог для решения" --> нажимаем "Ok"

- выбираем "Параметры приложения" --> ставим галочку "Пустой проект" --> нажимаем "Готово"

- на панели меню выбираем "Проект" --> "Добавить новый элемент" (Ctrl+Shift+A) --> сразу пишем имя: main.c (вне зависимости от выбранного шаблона) --> нажимаем: "Добавить"
8Observer8 вне форума   Ответить с цитированием
Старый 17.09.2012, 15:29   #18
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Создать диалоговое окно в ResEdit.

- запустить ResEdit

- (File --> New project) (или Ctrl+N) --> выбираем расположение (там где находится main.c) --> вводим имя файла --> нажимаем "Сохранить"

- (File --> Add a resource --> Dialog) (или Ctrl+D)

- удаляем кнопки, добавленные по умолчанию: "Ок" и "Cancel"

- выделяем диалоговое окно "Dialog" --> слева в панели "Properties" выбираем поле "Caption" (или начинаем вводить слово "caption" в поле "Enter search here" панели "Properties") и меняем заголовок окна с "Dialog" на требуемый
8Observer8 вне форума   Ответить с цитированием
Старый 17.09.2012, 15:31   #19
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Выравнять элементы GUI.

Для выравнивания элементов пользовательского интерфейса на панели инструментов есть соответствующие кнопки.

Если элемент один, то нужно выделить этот элемент и нажать кнопки: "Vertically center" и "Horizontally center".

Выделив группу, можно выравнять её по центру (как по вертикали, так и по горизонтали). Можно выравнивать относительно одного из элементов, того который выделяется последним. Относительно выбранного элемента можно выравнивать по его центру остальные, а так же по его левому или правому краю. Выделяются элементы последовательно с помощью удержания Ctrl и кликанья мышью. Выделенные элементы можно сделать одинаковыми как по ширине, так по высоте и по общему размеру.

По картинкам на кнопках панели инструментов можно понять, как произойдёт выравнивание. Советую экспериментировать.

Последний раз редактировалось 8Observer8; 17.09.2012 в 15:42.
8Observer8 вне форума   Ответить с цитированием
Старый 17.09.2012, 15:32   #20
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Подключить файл ресурсов к проекту Visual 2008.

- (на панели меню выбираем "Проект" --> "Существующий элемент") (или Ctrl+Alt+A) --> выбираем файл с расширением .rc --> нажимаем "Добавить"
8Observer8 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Различия WinAPI и создание оконных приложений VS Studio Sauber Общие вопросы C/C++ 13 03.07.2012 19:21
Создание окна(asm) с использованием WinApi Alex1991 Assembler 5 04.04.2011 13:20
Создание GUI в DirectX Selestis Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 02.08.2010 15:15
Создание сложных объектов в gui cherw9!40k Общие вопросы по Java, Java SE, Kotlin 0 22.03.2010 23:02
Создание GUI для WINDOWS inzener-tolik Помощь студентам 8 13.03.2010 12:39


15:26.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru