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

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

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

Ответ
 
Опции темы
Старый 03.05.2018, 15:56   #21
ИвановБ
Форумчанин
 
Регистрация: 19.12.2016
Сообщений: 67
Репутация: 10
По умолчанию

Вы дает ошибки вот какие
Цитата:
error C2059: синтаксическая ошибка: константа
error C2065: g_hInstance: необъявленный идентификатор
error C2065: IDM_GOTO: необъявленный идентификатор
error C2065: hwndGoto: необъявленный идентификатор
error C2065: hwndGoto: необъявленный идентификатор
error C2065: hInstance: необъявленный идентификатор
error C2065: GoToProc: необъявленный идентификатор
error C2065: hwndGoto: необъявленный идентификатор
error C2065: nShowCmd: необъявленный идентификатор
warning C4060: оператор switch не содержит метку 'case' или 'default'
error C2065: g_hInstance: необъявленный идентификатор
Необъявленный идентификатор понятно что за ошибка, но как их объявить? И почему ошибка выдает и на g_hInstance хотя до этого было нормально.
ИвановБ вне форума   Ответить с цитированием
Старый 03.05.2018, 16:21   #22
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,539
Репутация: 1916

icq: 216409213
По умолчанию

Т.е. вы даже не пытаетесь разобраться, а тупо копипастите код...

Цитата:
Сообщение от ИвановБ Посмотреть сообщение
error C2065: g_hInstance: необъявленный идентификатор
Проверяйте, где-то накосячили. Ну или выкладывайте весь код.

Цитата:
error C2065: IDM_GOTO: необъявленный идентификатор
Цитата:
The statements in the first part of the example create the modeless dialog box. These statements, in the window procedure for the application's main window, create the dialog box when the window procedure receives a WM_COMMAND message having the IDM_GOTO menu identifier, but only if the global variable does not already contain a valid handle.
Если вы не осилили виндовую систему сообщений, то лучше возьмите qt, sdl или другую либу, где это уже сделано за вас.

Цитата:
error C2065: hwndGoto: необъявленный идентификатор
Код:

HWND hwndGoto = NULL;  // Window handle of dialog box

Цитата:
error C2065: hInstance: необъявленный идентификатор
Там же уже нет hInstance, вы же для этого его сохраняете в глобальную переменную...

Цитата:
error C2065: GoToProc: необъявленный идентификатор
Цитата:
lpDialogFunc [in, optional]
Type: DLGPROC

A pointer to the dialog box procedure. For more information about the dialog box procedure, see DialogProc.
И кто ее по вашему должен объявлять и реализовывать?

Цитата:
error C2065: nShowCmd: необъявленный идентификатор
Ну если вы скопировали откуда-то шаблон, хотя в примере константа задана явно
Код:

ShowWindow(hwndGoto, SW_SHOW);

то и обеспечьте объявление и значение нужное вам.

Цитата:
warning C4060: оператор switch не содержит метку 'case' или 'default'
Скорее всего где-то с скобками или запятами/точками с запятыми налажали, вот и g_hInstance пропал.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 03.05.2018, 16:41   #23
ИвановБ
Форумчанин
 
Регистрация: 19.12.2016
Сообщений: 67
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Цитата:
Сообщение от ИвановБ
error C2065: g_hInstance: необъявленный идентификатор
Проверяйте, где-то накосячили. Ну или выкладывайте весь код.
Убираю подключение ресурсного файла ошибка уходит.

Вот основной код
Код:

// Подключаем библиотеки Windows для Win32
#include <windows.h>
#include <CommCtrl.h>
#pragma comment(lib, "Comctl32")
#include "resource.h" 

#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);
	
	HWND hwndGoto = NULL;

    // Если окно не было создано, то выдаем сообщение
    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:
			switch (LOWORD(wParam)) 
			{ 
				case IDM_GOTO: 
					if (!IsWindow(hwndGoto)) 
				{ 
						hwndGoto = CreateDialogParam(hInstance, 
												MAKEINTRESOURCE(IDD_DIALOG), 
												NULL, 
												(DLGPROC)GoToProc); 
						ShowWindow(hwndGoto, SW_SHOW);
				} 
				break; 
			} 
			return 0L; 

        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);
}

Файл ресурса
Код:

#define IDD_DIALOG 101

IDD_DIALOG DIALOGEX 0, 0, 316, 180
STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Добавить", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "ОК",IDOK,205,159,50,14
    PUSHBUTTON      "Отмена",IDCANCEL,259,159,50,14
END

Здесь наверно тоже не так что-то.
ИвановБ вне форума   Ответить с цитированием
Старый 03.05.2018, 16:48   #24
ИвановБ
Форумчанин
 
Регистрация: 19.12.2016
Сообщений: 67
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
lpDialogFunc [in, optional]
Type: DLGPROC

A pointer to the dialog box procedure. For more information about the dialog box procedure, see DialogProc.
И кто ее по вашему должен объявлять и реализовывать?
Инфу про это читаю в тех документе, но не въеду что в ней.... Мда...стыдно. Голова уже что ли не соображает.
ИвановБ вне форума   Ответить с цитированием
Старый 03.05.2018, 16:50   #25
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,539
Репутация: 1916

icq: 216409213
По умолчанию

Цитата:
Сообщение от ИвановБ Посмотреть сообщение
Убираю подключение ресурсного файла ошибка уходит.
Значит ошибка где? Проверяйте все ли END на месте и т.д.

Цитата:
FONT 8, "Добавить", 400, 0, 0x1
У вас действительно в системе зарегистрирован шрифт "Добавить"?

У CreateDialogParam 5 параметров, в примере использовался макрос CreateDialog с 4 параметрами.

Цитата:
Сообщение от ИвановБ Посмотреть сообщение
Инфу про это читаю в тех документе, но не въеду что в ней
Цитата:
Remarks
You should use the dialog box procedure only if you use the dialog box class for the dialog box. This is the default class and is used when no explicit class is specified in the dialog box template. Although the dialog box procedure is similar to a window procedure, it must not call the DefWindowProc function to process unwanted messages. Unwanted messages are processed internally by the dialog box window procedure.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!

Последний раз редактировалось p51x; 03.05.2018 в 16:52.
p51x на форуме   Ответить с цитированием
Старый 03.05.2018, 17:01   #26
ИвановБ
Форумчанин
 
Регистрация: 19.12.2016
Сообщений: 67
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
У вас действительно в системе зарегистрирован шрифт "Добавить"?
Да ошибка тупая не туда вписал...

Цитата:
Сообщение от p51x Посмотреть сообщение
Значит ошибка где? Проверяйте все ли END на месте и т.д.
Да ошибку на синтаксис дает.
ИвановБ вне форума   Ответить с цитированием
Старый 03.05.2018, 17:04   #27
ИвановБ
Форумчанин
 
Регистрация: 19.12.2016
Сообщений: 67
Репутация: 10
По умолчанию

p51x, Не удобно конечно, но может покажете как должно правильно выглядеть?

Цитата:
Сообщение от p51x Посмотреть сообщение
Remarks
You should use the dialog box procedure only if you use the dialog box class for the dialog box. This is the default class and is used when no explicit class is specified in the dialog box template. Although the dialog box procedure is similar to a window procedure, it must not call the DefWindowProc function to process unwanted messages. Unwanted messages are processed internally by the dialog box window procedure.
То есть получается это мне не обязательно?

Последний раз редактировалось ИвановБ; 03.05.2018 в 17:07.
ИвановБ вне форума   Ответить с цитированием
Старый 03.05.2018, 17:11   #28
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,539
Репутация: 1916

icq: 216409213
По умолчанию

Если вам нужен стандартный тупой диалог без изысков, то да - есть стандартная процедура обработки. Не зря же параметр помечен, как опциональный.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 03.05.2018, 17:19   #29
ИвановБ
Форумчанин
 
Регистрация: 19.12.2016
Сообщений: 67
Репутация: 10
По умолчанию

Не нужно изысков, а что вместо него записывать? В тех документе я не вижу, что используется вместо
ИвановБ вне форума   Ответить с цитированием
Старый 03.05.2018, 17:30   #30
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,539
Репутация: 1916

icq: 216409213
По умолчанию

Какой тип у этого параметра? Указатель, даже в описании написано. Какое значение указателя показывает, что этот указатель ни на что не ссылается?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Ответ

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графический интерфейс KoRn0509 Python 7 24.10.2017 00:04
Графический интерфейс в DOS Maksimall89 Assembler 0 21.12.2011 17:23
Не могу создать графический интерфейс PastoriXx Общие вопросы по Java, Java SE, Kotlin 2 08.12.2010 16:11
Графический интерфейс aTBepTKa Общие вопросы C/C++ 2 04.02.2009 17:18


19:38.


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

RusProfile.ru


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