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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2012, 16:03   #1
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию Ошибка с3867 function call missing argument list

большой проект Win32, в нем добавил формочку, то есть диалог. Вызываю этот диалог так:

CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), GetDesktopWindow(), NULL);

но так как мне нужна функция-обработчик событий

CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), GetDesktopWindow(), DialogProc);

и в другой файл кинул мою функцию
Код:
#include <Windows.h> 


BOOL WINAPI DialogProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
static HWND hButtonFlash = NULL; 
static HWND hButtonReq = NULL; 
static HWND hEdit1 = NULL; 

switch(uMsg) 
{ 
case WM_CLOSE: 
EndDialog(hWindow, 0); 
DestroyWindow(hWindow); 
return TRUE; 
....... 

return TRUE; 
} 

return FALSE; 
}

выдало ошибку, так как параметры не передаю при вызове, в нете во всех примерах никто ничего не передает (http://win32easy.blogspot.com/2011/0...uttons-co.html). Что я делаю не так?

Последний раз редактировалось Stilet; 13.11.2012 в 18:00.
enjo вне форума Ответить с цитированием
Старый 13.11.2012, 16:08   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Дурацкий вопрос: функцию объявили перед вызовом CreateDialog()?
Abstraction вне форума Ответить с цитированием
Старый 13.11.2012, 16:23   #3
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

да, перед вызовом

вся суть аопроса заключается в том, что : как правильно объявить и вызвать 4 параметр CreateDialog?

Последний раз редактировалось enjo; 13.11.2012 в 16:25.
enjo вне форума Ответить с цитированием
Старый 13.11.2012, 16:32   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

По идее, именно так, как Вы это и делаете. Что странно. Можно код вызова CreateDialog с несколькими предшествующими строками?
Abstraction вне форума Ответить с цитированием
Старый 13.11.2012, 16:40   #5
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

Код:
BOOL WINAPI DialogProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam)  
{  
 static HWND hButtonFlash = NULL;  
 static HWND hButtonReq = NULL;  
 static HWND hEdit1 = NULL;  
  
 switch(uMsg)  
 {  
 case WM_CLOSE:  
  EndDialog(hWindow, 0);  
  DestroyWindow(hWindow);  
  return TRUE;  
  
 case WM_INITDIALOG:  
  {  
  /* hButtonFlash = GetDlgItem(hWindow, IDB_FLASH);  
   hButtonReq = GetDlgItem(hWindow, IDB_REQTEXT);  
   hEdit1 = GetDlgItem(hWindow, IDC_EDIT1);  */
   if(hButtonFlash == NULL || hButtonReq == NULL || hEdit1 == NULL)  
   {  
    MessageBox(hWindow, "Unable to retrieve controls! Closing....", "Error!", MB_OK);  
    EndDialog(hWindow, 0);  
    DestroyWindow(hWindow);  
    return TRUE;  
   }  
  
   break;  
  }  
  return TRUE;  
  
 case WM_COMMAND:  
  {  
   if(HIWORD(wParam) != BN_CLICKED) // we are only interested in clicks  
    break;  
  
   switch(LOWORD(wParam))  
   {  
   /*case IDB_FLASH:  
    {  
     FlashWindow(hWindow, TRUE);  
     break;  
    }  
    break;  
   case IDB_REQTEXT:  
    {  
     int textLen = GetWindowTextLength(hEdit1);  
     if(textLen == 0)  
      break;  
  
     // We need to include the terminating 0, GetWindowTextLength does not count it!  
     TCHAR* wndText = new TCHAR[textLen + 1];  
     GetWindowText(hEdit1, wndText, textLen + 1);  
     MessageBox(hWindow, wndText, "Info", MB_OK);  
     delete [] wndText;  
    }  
    break; */ 
   }  
  }  
  return TRUE;  
 }  
  
 return FALSE;  
}  
//--------------------------------------------------------------------------------------------------
void Demo::FluidScene::_init_demo_scene()
{   
    // create a Scenario
    _spScenario = PBEL_GetInterfaceInstance(PBEL, IScenario, 0);

    _set_camera();
    _make_UI();

    // create a PhysicsWorld and add it to Scenario
    PBEL::IScenarioPhysicsWorld::SmPtr spPhysicsWorld =
        PBEL_GetInterfaceInstance(PBEL, IScenarioPhysicsWorld, 0);
    _spScenario->AddObject(*spPhysicsWorld);
    
    // set default gravity acceleration
    spPhysicsWorld->SetGravity( UX::Vec3(0.0f, -9.81f, 0.0f) );

    // let's create invisible frame around window
    /*int i = 0;
    while (!akScene[i].kName.empty())
    {
        PBEL::IRigidBody::SmPtr pkRigidBody =
           _create_rigid_body(&akScene[i++], spPhysicsWorld.Get());
    }*/
......
    _spSPH->SetBoundingBox(kMin, kMax);

    spPhysicsWorld->AddObject(*_spSPH);

#ifdef WIN32
	CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), GetDesktopWindow(), DialogProc);

#endif
}
в .h прописал так:
Код:

class FluidScene : public Demo::DemoScene
{
public:
    FluidScene();
    ~FluidScene();
    ......
private:
	BOOL WINAPI DialogProc(HWND, UINT, WPARAM, LPARAM);
    ......
}

Последний раз редактировалось Stilet; 13.11.2012 в 18:01.
enjo вне форума Ответить с цитированием
Старый 13.11.2012, 16:46   #6
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

или может есть способ обработчик проще описать? вообще-то непонятна работа с этими параметрами
так в инете пишут:
"Функция DialogProc - определяемая программой функция повторного вызова, которая обрабатывает сообщения, отправленные модальному или немодальному диалоговому окну.

Синтаксис

BOOL CALLBACK DialogProc
(
HWND hwndDlg, // дескриптор диалогового окна
UINT uMsg, // сообщение
WPARAM wParam, // первый параметр сообщения
LPARAM lParam // второй параметр сообщения
);
Параметры
hwndDlg
Идентифицирует диалоговое окно.
uMsg
Определяет сообщение.
wParam
Определяет дополнительную конкретизирующую сообщение информацию.
lParam
Определяет дополнительную конкретизирующую сообщение информацию."
хм... а когда вызываем, то что они не нужны? Я пробовал писать возвращ тип void и без параметров объявлял, тоже не нравится.... запутался конкретно(
enjo вне форума Ответить с цитированием
Старый 13.11.2012, 17:16   #7
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Цитата:
CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), GetDesktopWindow(), NULL);

но так как мне нужна функция-обработчик событий

CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), GetDesktopWindow(), DialogProc);

и в другой файл кинул мою функцию
Когда NULL передаете вместо DialogProc все работает?
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 13.11.2012, 17:19   #8
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

да, работает без ошибок, но я даже по крестику формочку не могу закрыть так, как нет обработчика
enjo вне форума Ответить с цитированием
Старый 13.11.2012, 17:21   #9
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

А если объявить вот такую функцию и ее передать:
Код:
BOOL CALLBACK MyProc(HWND hwndDlg, UINT message, 
                       WPARAM wParam, LPARAM lParam) 
{
   return TRUE;
}

CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), GetDesktopWindow(), MyProc);
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 13.11.2012, 17:33   #10
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

Ребят, спасибо большое за помощь. Если кому-то пригодится:

CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), GetDesktopWindow(), (DLGPROC)::DialogProc);
enjo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка error C2447: missing function header (old-style formal list?) AnryFlame Visual C++ 9 11.04.2012 14:40
ошибка Call to a member function fetch_assoc() on a non-object Bendebej PHP 2 02.04.2010 14:04
Call to undefined function 'pow' fs444 Общие вопросы C/C++ 4 14.01.2010 14:34
invalid procedure call or argument igorrt Microsoft Office Access 1 03.03.2009 16:35
Fatal error: Call to undefined function mysql_connect() Air Помощь студентам 1 17.01.2009 12:41