Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

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

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

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
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

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


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

- на диалоговом окне расположены три вида элементов пользовательского интерфейса: 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
По умолчанию

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

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

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

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

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
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

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

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

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

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

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

Создать диалоговое окно в 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
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Различия WinAPI и создание оконных приложений VS Studio Sauber Общие вопросы C/C++ 13 03.07.2012 19:21
Создание окна(asm) с использованием WinApi Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 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 22:02
Создание GUI для WINDOWS inzener-tolik Помощь студентам 8 13.03.2010 11:39