Диалоговые окна(С++)

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Irene_001
Сообщения: 4
Зарегистрирован: 06 ноя 2007, 16:25

У меня вопрос по диалоговым окнам…(Пишу на с++ ). учусь по петзольду, ввожу код из книги, а выдаётся ошибка… долго морочилась но не могу разобраться(((

Нужно просто выдать диалоговое окно с инфо.
Выдаются две ошибки:
1) Cannot convert 'int (__stdcall *)(void *,unsigned int,unsigned int,long)' to 'int (__stdcall *)()'

2) Type mismatch in parameter 'lpDialogFunc' (wanted 'int (__stdcall *)()', got 'int (__stdcall *)(void *,unsigned int,unsigned int,long)')

оконная процедура:

Код: Выделить всё

LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    static WNDPROC lpfnAboutDlgProc;
    static HINSTANCE hInstance;
    switch(iMsg)
    {
        case WM_CREATE :
           hInstance =((LPCREATESTRUCT) lParam)->hInstance;
           return 0;

        case WM_COMMAND :
           switch(LOWORD(wParam))
           {
               case IDM_ABOUT :
                   DialogBox(hInstance, "AboutBox", hwnd, AboutDlgProc);// [I][U][B]в этой строке выдаётся ошибка[/B][/U][/I]

                   return 0;
           }
           break;

           case WM_DESTROY :
               PostQuitMessage(0);
               return 0;
    }

    return DefWindowProc(hwnd, iMsg, wParam, lParam);

}



BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
switch(iMsg)
{
case WM_INITDIALOG :
return TRUE;
case WM_COMMAND :
switch(LOWORD(wParam))
{
case IDOK :
case IDCANCEL :
я  EndDialog(hDlg, 0);
return TRUE;
}
break;
}
return FALSE;
}
Ресурс такой:

Код: Выделить всё

#include "About1.h"
About1 MENU
{

   POPUP "&Help"
   {
       MENUITEM "&About About1...", IDM_ABOUT
   }

}

AboutBox DIALOG 20, 20, 160, 80
STYLE WS_POPUP | WS_DLGFRAME
{
CTEXT "About1" -1, 0, 12, 160, 8
CTEXT "About Box Demo Program" -1, 0, 36, 160, 8
CTEXT "(c) Charles Petzold, 1996" -1, 0, 48, 160, 8
DEFPUSHBUTTON "OK" IDOK, 64, 60, 32, 14, WS_GROUP
}
И последний файл About1.h

Код: Выделить всё

define IDM_ABOUT 1
Irene_001
Сообщения: 4
Зарегистрирован: 06 ноя 2007, 16:25

нашла в инете человека, у которого была подобная проблема. Короче строку

Код: Выделить всё

DialogBox(hInstance, "AboutBox", hwnd, AboutDlgProc);
надо заменить строкой

Код: Выделить всё

DialogBox(hInstance,"AboutBox",hwnd, (FARPROC)AboutDlgProc);
мож пригодится такому начинающему как я, ато читала две классические книги(Петзольда и Румянцева), там ответа нет.
Ответить