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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2018, 16:13   #1
ИвановБ
Пользователь
 
Регистрация: 19.12.2016
Сообщений: 70
По умолчанию Создать графический интерфейс Участники соревнований

Уважаемые форумчане прошу помочь сделать программку на WIN API. Создать родительское окно, содержащее список участников соревнования, меню с пунктом Добавить и диалоговое окно Добавить, содержащее поля ФИО и Рейтинг участника, а так же кнопки ОК и Отмена. При нажатии ОК занести участника в список. С Win API не знаком вообще сам не давно начал Java изучать, и нет времени на данный момент вникать в WIN API.

Буду очень благодарен.
ИвановБ вне форума Ответить с цитированием
Старый 26.04.2018, 16:19   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Ну так оглашайте сроки и размер благодарностей.
p51x вне форума Ответить с цитированием
Старый 02.05.2018, 23:15   #3
ИвановБ
Пользователь
 
Регистрация: 19.12.2016
Сообщений: 70
По умолчанию

Уважаемые гуру!
Прошу помощи вот накатал код
Код:
// Подключаем библиотеки Windows для Win32
#include <windows.h>
#include <CommCtrl.h>
#pragma comment(lib, "Comctl32")
 
#define ID_LISTVIEW 1001

HINSTANCE g_hInstance;
HWND g_hMainWnd;
HWND g_hListView;

// Объявляем прототип CALLBACK функции
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 
BOOL ListViewCreate(HWND hParent);
BOOL ListViewAddItem(char* pCol1, char* pCol2);
VOID ListViewResize();
 
// Функция WinAPI для точки входа в программу
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    g_hInstance = hInstance;
    // Регистрация класса окна
    // Объявляем переменную типа WNDCLASSEX
 
    WNDCLASSEX wClass; 
    ZeroMemory(&wClass, sizeof(WNDCLASSEX)); // Обнуляем память
    // Заполняем структуру WNDCLASSEX
    wClass.cbSize = sizeof(WNDCLASSEX); // Размер равен размеру структуры
    wClass.hbrBackground = (HBRUSH)COLOR_WINDOW; // Определяем фон окна
    wClass.hInstance = hInstance; // hInstance window
    wClass.lpfnWndProc = (WNDPROC)WndProc; // Процедура обработки окна
    wClass.lpszClassName = "Athlete"; // Имя класса
 
    // Если произошла ошибка, то выводим сообщение
    if (!RegisterClassEx(&wClass))
    {
        int nResult = GetLastError();
        MessageBox(NULL, "Класс окна не был создан!", "Ошибка", MB_ICONERROR);
    }
 
    // Создаем окно при помощи функции WinApi CreateWindowEx
    g_hMainWnd = CreateWindowEx(NULL,
        "Athlete", // Имя класса, который мы определили ранее
        "Участники соревнований", // Заголовок окна
        WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
        300, // x координата по горизонтали
        200, // y координата по вертикали
        516, // ширина создаваемого окна
        380, // высота создаваемого окна
        NULL,
        NULL,
        hInstance, // переменная экземпляра приложения
        NULL);

	//Создание строки состояния
    HWND hStatusWindow = CreateStatusWindow (WS_CHILD | WS_VISIBLE, "", g_hMainWnd, 5000); 
 
    HMENU hMainMenu, hPopMenuFile;
    hMainMenu = CreateMenu();
	hPopMenuFile = CreatePopupMenu();

    AppendMenu(hMainMenu, MF_STRING|MF_POPUP, (UINT)hPopMenuFile, "Меню"); 
	
	AppendMenu(hPopMenuFile, MF_STRING , 1000, "Добавить");
	AppendMenu(hPopMenuFile, MF_STRING , 1001, "Выход");

    SetMenu(g_hMainWnd, hMainMenu);

    // Если окно не было создано, то выдаем сообщение
    if (!g_hMainWnd)
    {
        int nResult = GetLastError();
        MessageBox(NULL, "Окно не было создано!", "Ошибка", MB_ICONERROR);
    }
	
    // Показываем окно
    ShowWindow(g_hMainWnd, nShowCmd);
 
    // Объявляем переменную для сообщений типа MSG
    MSG msg;
    // Цикл обработки сообщений
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return 0;
}
 
// определяем процедуру обратного вызова (WinApi)
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CREATE:
            // Здесь будем создавать элементы управления окна
            ListViewCreate(hwnd);
            ListViewAddItem("Головин П. Н.", "1");
            ListViewAddItem("Марков В. А.", "2");
            ListViewAddItem("Кудряшов Н. К.", "3");
            ListViewAddItem("Маслов Е. С.", "4");
            return 0;
 
        case WM_SIZE:
            ListViewResize();
            return 0;
	
		case WM_COMMAND:
			

        case WM_DESTROY: // Обработка нажатия кнопки закрытия окна
            PostQuitMessage(0);
            return 0;
    }
 
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
 
BOOL ListViewCreate(HWND hParent)
{
    INITCOMMONCONTROLSEX icex;
    icex.dwSize = sizeof(icex);
    icex.dwICC = ICC_LISTVIEW_CLASSES;
    InitCommonControlsEx(&icex);
    
    // размер главного окна
    RECT rcClient;
    GetClientRect(hParent, &rcClient);
 
    // создание списка
    g_hListView = CreateWindow(
        WC_LISTVIEW, 
        NULL, 
        LVS_SINGLESEL | LVS_REPORT | WS_CHILD | WS_VISIBLE, //стиль отображения столбцов
        rcClient.left, 
        rcClient.top, 
        rcClient.right - rcClient.left, 
        rcClient.bottom - rcClient.top, 
        hParent, 
        (HMENU) ID_LISTVIEW, 
        g_hInstance, 
        NULL);
 
    if (!g_hListView)
        return FALSE;
 
    // доп. свойства
    ListView_SetExtendedListViewStyleEx(g_hListView, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
 
    // добавить столбцы
    LVCOLUMN lvc;
    lvc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
    lvc.iSubItem = 0;
    lvc.pszText = "ФИО";
    lvc.cx = 260;
    if (ListView_InsertColumn(g_hListView, 0, &lvc) == -1)
        return FALSE;
    lvc.iSubItem = 1;
    lvc.pszText = "Рейтинг";
    lvc.cx = 250;
    if (ListView_InsertColumn(g_hListView, 1, &lvc) == -1)
        return FALSE;
 
    return TRUE;
}
 
BOOL ListViewAddItem(char* pCol1, char* pCol2)
{
    LVITEM lvi;
    lvi.mask = LVIF_TEXT;
    lvi.iSubItem = 0;
    lvi.iItem = 0x7FFFFFFF;
    lvi.pszText = pCol1;
    // добавить элемент
    int index = ListView_InsertItem(g_hListView, &lvi);
    if (index < 0)
        return FALSE;
 
    // установить текст во второй столбец элемента
    ListView_SetItemText(g_hListView, index, 1, pCol2);
 
    return TRUE;
}
 
VOID ListViewResize()
{
    RECT rcClient;
    GetClientRect(g_hMainWnd, &rcClient);
 
    SetWindowPos(g_hListView, 0, 0, 0, rcClient.right-rcClient.left, rcClient.bottom-rcClient.top, SWP_NOZORDER);
}
Нужно создать диалоговое окно и что бы оно открывалось после нажатия кнопки добавить в меню. Никак не получается реализовать кто сможет помочь?

И еще вот правильно я создаю диалоговое окно?
Код:
	HWND hDialog;
	hDialog = CreateDialogParam(
		"Athlete",
		"Добавить",
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,
		2,
		2,
		150,
		150,
		NULL,
        NULL,
        hInstance,
		NULL);
ИвановБ вне форума Ответить с цитированием
Старый 02.05.2018, 23:41   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,357
По умолчанию

Цитата:
Сообщение от ИвановБ Посмотреть сообщение
И еще вот правильно я создаю диалоговое окно?
Нет.
Берете документацию функции CreateDialogParam и сравниваете с тем, что у вас.
waleri вне форума Ответить с цитированием
Старый 03.05.2018, 00:16   #5
ИвановБ
Пользователь
 
Регистрация: 19.12.2016
Сообщений: 70
По умолчанию

А вот какую функцию создания диалогова окна лучше выбрать? Мне в этом окне нужно будет разместить две кнопки и два Edita
ИвановБ вне форума Ответить с цитированием
Старый 03.05.2018, 07:21   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,357
По умолчанию

Цитата:
Сообщение от ИвановБ Посмотреть сообщение
А вот какую функцию создания диалогова окна лучше выбрать?
CreateDialogParam
waleri вне форума Ответить с цитированием
Старый 03.05.2018, 10:33   #7
ИвановБ
Пользователь
 
Регистрация: 19.12.2016
Сообщений: 70
По умолчанию

Код:
HWND hDialog;
	hDialog = CreateDialogParam(hInstance,MAKEINTRESOURCE(IDD_DIALOG),NULL,DlgProc,NULL);
Получается как то, а в подключаемом ресурсном файле находится IDD_DIALOG. Правильно я понял?
Код:
// resource.h
#define IDD_DIALOG 101
ИвановБ вне форума Ответить с цитированием
Старый 03.05.2018, 10:34   #8
ИвановБ
Пользователь
 
Регистрация: 19.12.2016
Сообщений: 70
По умолчанию

Но как мне выбрать размеры окна.... Чет я запутался...
ИвановБ вне форума Ответить с цитированием
Старый 03.05.2018, 11:03   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,357
По умолчанию

Размер окна и его элементы определены в ресурсном файле.
waleri вне форума Ответить с цитированием
Старый 03.05.2018, 12:19   #10
ИвановБ
Пользователь
 
Регистрация: 19.12.2016
Сообщений: 70
По умолчанию

А как их там определить я нигде не могу найти?
ИвановБ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графический интерфейс KoRn0509 Python 7 23.10.2017 23:04
Графический интерфейс в DOS Maksimall89 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 21.12.2011 17:23
Не могу создать графический интерфейс PastoriXx Общие вопросы по Java, Java SE, Kotlin 2 08.12.2010 15:11
Графический интерфейс aTBepTKa Общие вопросы C/C++ 2 04.02.2009 16:18