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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2012, 10:27   #1
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию Ошибка ERROR_RESOURCE_NAME_NOT_FOUND при создании диалогового окна, описанного в файле ресурсов.

Привествую! Решил освоть создание пользовательского интерфейса с помощью бесплатного редактора ресурсов ResEdit --> ссылка И сразу столкнулся с проблемой: не создаётся диалоговое окно!

GetLastError() возвращает ERROR_RESOURCE_NAME_NOT_FOUND - The specified resource name cannot be found in the image file.

Что не так? Помогите пожалуйста!

main.c
Код:
#include <windows.h>

LPCTSTR szClassName = "DLGCLASS";
LPCTSTR szDlgName = "IDD_DIALOG1";

// Forward declarations of functions included in this code module:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow) {
    WNDCLASSEX wcex;
    MSG msg;
    HWND hDlg;
    //HWND hDlgItem;

    wcex.cbSize         = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = DLGWINDOWEXTRA;
    wcex.hInstance      = hInstance;
    wcex.hbrBackground  = (HBRUSH)(COLOR_BTNFACE+1);//(COLOR_3DFACE + 1);//(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL; // szMenuName;
    wcex.lpszClassName  = szClassName;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);

    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            "Call to RegisterClassEx failed!",
            "Win32 Guided Tour",
            NULL);

        return 1;
    }

    hDlg = CreateDialogParam(hInstance, szDlgName, NULL, NULL, NULL);
    int error_code = GetLastError();

    if (!hDlg) {
        MessageBox(NULL,
            "Call to CreateWindow failed!",
            "Win32 Guided Tour",
            NULL);

        return 1;
    }

    ShowWindow(hDlg,
        SW_SHOWNORMAL);
    UpdateWindow(hDlg);

    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0)) {
        if (!IsDialogMessage(hDlg, &msg)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {

    switch (message) {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }

    return 0;
}
res.rc
Код:
// Generated by ResEdit 1.5.8
// Copyright (C) 2006-2011
// http://www.resedit.net

#include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"




//
// Dialog resources
//
LANGUAGE 0, SUBLANG_NEUTRAL
IDD_DIALOG1 DIALOG 0, 0, 314, 220
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Рассчёт влажности"
FONT 8, "Ms Shell Dlg"
CLASS "DLGCLASS"
{
    DEFPUSHBUTTON   "Рассчитать", IDOK, 49, 115, 216, 35
    EDITTEXT        IDC_EDIT1, 214, 32, 51, 13, ES_AUTOHSCROLL
    EDITTEXT        IDC_EDIT2, 214, 72, 51, 12, ES_AUTOHSCROLL
    LTEXT           "Показания ""сухого"" термометра:", IDC_STATIC, 49, 37, 114, 8, SS_LEFT
    LTEXT           "Показания ""мокрого"" термометра:", IDC_STATIC, 49, 76, 121, 8, SS_LEFT
    EDITTEXT        IDC_EDIT3, 214, 175, 51, 14, ES_AUTOHSCROLL
    LTEXT           "Влажность:", IDC_STATIC, 155, 181, 40, 8, SS_LEFT
}
resource.h
Код:
#ifndef IDC_STATIC
#define IDC_STATIC (-1)
#endif

#define IDD_DIALOG1                             100
#define IDOK                                    1000
#define IDC_EDIT1                               1001
#define IDC_EDIT2                               1002
#define IDC_EDIT3                               1003
8Observer8 вне форума Ответить с цитированием
Старый 09.02.2012, 11:34   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

LPCTSTR szDlgName=MAKEINTRESOURCE(IDD_DIALO G1) вместо LPCTSTR szDlgName = "IDD_DIALOG1";
counter вне форума Ответить с цитированием
Старый 09.02.2012, 12:07   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
LPCTSTR szDlgName=MAKEINTRESOURCE(IDD_DIALO G1) вместо LPCTSTR szDlgName = "IDD_DIALOG1";
counter, спасибо! Я ещё забыл в файле main.c написать:
Код:
#include "resource.h"
Исправленный код:
Код:
#include <windows.h>
#include "resource.h"

LPCTSTR szClassName = "DLGCLASS";
LPCTSTR szDlgName = MAKEINTRESOURCE(IDD_DIALOG1);

// Forward declarations of functions included in this code module:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow) {
    WNDCLASSEX wcex;
    MSG msg;
    HWND hDlg;

    wcex.cbSize         = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = DLGWINDOWEXTRA;
    wcex.hInstance      = hInstance;
    wcex.hbrBackground  = (HBRUSH)(COLOR_BTNFACE+1);//(COLOR_3DFACE + 1);//(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL; // szMenuName;
    wcex.lpszClassName  = szClassName;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);

    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            "Call to RegisterClassEx failed!",
            "Win32 Guided Tour",
            NULL);

        return 1;
    }

    hDlg = CreateDialogParam(hInstance, szDlgName, NULL, NULL, NULL);

    if (!hDlg) {
        MessageBox(NULL,
            "Call to CreateWindow failed!",
            "Win32 Guided Tour",
            NULL);

        return 1;
    }

    ShowWindow(hDlg,
        SW_SHOWNORMAL);
    UpdateWindow(hDlg);

    // Main message loop:
    while (GetMessage(&msg, NULL, 0, 0)) {
        if (!IsDialogMessage(hDlg, &msg)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int) msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {

    switch (message) {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }

    return 0;
}

Последний раз редактировалось 8Observer8; 09.02.2012 в 12:37. Причина: Добавил исправленный код.
8Observer8 вне форума Ответить с цитированием
Старый 10.02.2012, 16:07   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Нашёл более удобный метод работы с диалоговыми окнами в соответствии с уроком Iczelion'a (второй пример) --> http://wasm.ru/article.php?article=1001010 Может кому-то пригодится.

main.c
Код:
#include <windows.h>
#include "resource.h"

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

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

LPCTSTR szDlgName = MAKEINTRESOURCE(IDD_DIALOG1);
LPCTSTR szDlgDataProc = MAKEINTRESOURCE(IDD_DIALOG2);

// Forward declarations of functions included in this code module:
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    return DialogBoxParam(hInstance, szDlgName, NULL, BasicDialogProc, NULL);
}

INT_PTR CALLBACK BasicDialogProc(HWND hwndDlg,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam )
{
    switch (uMsg) {
    case WM_INITDIALOG:
        CheckDlgButton(hwndDlg, IDC_CHECKBOX1, 1);
        break;
    case WM_COMMAND:
        if (wParam == IDM_PROC) {
            DialogBoxParam(NULL, szDlgDataProc, NULL, DialogProc, NULL);
        }
        if (wParam == ID_CALC) {
        }
        else if (wParam == IDM_EXIT) {
            EndDialog(hwndDlg, NULL);
        }
        else if (wParam == IDM_CALC) {
            SendMessage(hwndDlg, WM_COMMAND, ID_CALC, 0);
        }
        else if (wParam == IDM_CLEAR) {
            SetDlgItemText(hwndDlg,IDC_EDIT1,NULL);
            SetDlgItemText(hwndDlg,IDC_EDIT2,NULL);
            SetDlgItemText(hwndDlg,IDC_EDIT3,NULL);
        }
        break;
    case WM_CLOSE:
        EndDialog(hwndDlg, NULL);
        break;
    }

    return 0;
}

INT_PTR CALLBACK DialogProc(HWND hwndDlg,
                            UINT uMsg,
                            WPARAM wParam,
                            LPARAM lParam )
{
    switch (uMsg) {
    case WM_COMMAND:
        break;
    case WM_CLOSE:
        EndDialog(hwndDlg, NULL);
        break;
    }

    return 0;
}
P.S. Остальные файлы во вложении.
Вложения
Тип файла: txt resource_h.txt (920 байт, 127 просмотров)
Тип файла: txt res_rc.txt (2.3 Кб, 126 просмотров)
8Observer8 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в fasm'е, при создании окна, в заголовке получается бессмыслица Zhigool' Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 04.02.2012 22:31
Проверка наличия диалогового окна Diego__ Microsoft Office Word 2 19.11.2010 19:18
У диалогового окна пропадает фон ssashas Помощь студентам 0 25.04.2010 21:22
Свой цвет при создании окна Alex Cones Общие вопросы Delphi 12 24.04.2010 12:56
Вызов диалогового окна Sapsan Общие вопросы C/C++ 6 30.03.2009 23:03