Студия и диалоговые приложения

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ntldr, 30 Mar 2010.

  1. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    Я уже много времени мучаюсь с проблемой - при создании приложения с главным окном в виде диалога из пустого проекта (без всяких stdafx и т.д.), оно просто не работает. То есть запускается и сразу закрывается.

    общий вид кода такой:

    PHP:
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         
    HINSTANCE hPrevInstance,
                         
    LPTSTR    lpCmdLine,
                         
    int       nCmdShow)
    {
        
    DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,MainWnd);
        return 
    0;
    }

    INT_PTR CALLBACK MainWnd(HWND hDlgUINT messageWPARAM wParamLPARAM lParam)
    {
        return (
    INT_PTR)FALSE;
    }
    1)В отладчике проверял - FindResourceEx(), вызываемый DialogBox() возвращает ноль при поиске ресурса диалога.
    2)Этот ресурс ЕСТЬ
    3)Такой бодяги нет при создании проекта с stdafx

    Пожалуйста помогите, я уже просто зае....ся :(
     
    2 people like this.
  2. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    - выдал отладчик студии

    В общем похоже что в DialogBox передается левый hInstance (наверное из - за рандомного базового адреса), как это можно починить?
     
  3. transserg

    transserg Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    147
    Likes Received:
    25
    Reputations:
    2
    ntldr вот проект от VS2008 в котором главная форма диалог из ресурсов и одна кнопка.. компилится и работает =). писался тоже из пустого проекта ручками.
    http://www.multiupload.com/1OI5J94IWZ ссыль на архив с проэктом
    Code:
    
    INT_PTR CALLBACK DialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {			
    	switch (uMsg)
    	{	
    	case WM_COMMAND:
    		switch (wParam)
    		{	
    			case IDC_BUTTON1:
    			MessageBox(hwndDlg,L"Тест",L"!!!!!",MB_OK);
    			return INT_PTR(TRUE);
    		}  
    	case WM_INITDIALOG:
    		{
    			return INT_PTR(TRUE);
    		}
    	case WM_CLOSE	: 
    		EndDialog(hwndDlg,wParam); 
    		return INT_PTR(TRUE);			
    
    	case WM_DESTROY	: 
    		EndDialog(hwndDlg,wParam); 
    		return INT_PTR(TRUE);							
    	}
    	return 0;
    }
    
    
    int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
    {
    	DialogBoxParam(hInstance, MAKEINTRESOURCE	(IDD_DIALOG1), HWND_DESKTOP, (DLGPROC)DialogProc, 0);
    }
    
    
    в проекте всего 2 функции =)
     
    #3 transserg, 31 Mar 2010
    Last edited: 31 Mar 2010
    1 person likes this.
  4. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    Я уж не знаю, как так получилось, но подозреваю, что дело в том, что у тебя главная функция WinMain, а у меня какая-то левая. :confused:


    Хотя я уже решил проблему, прописав в свойствах проекта фиксированный адрес базы 0x400000 и соответственно таким образом вызвал диалог:

    PHP:
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         
    HINSTANCE hPrevInstance,
                         
    LPTSTR    lpCmdLine,
                         
    int       nCmdShow)
    {
        
    DialogBox((HINSTANCE)0x400000,MAKEINTRESOURCE(IDD_DIALOG1),0,MainWnd);
        return 
    0;
    }
     
    #4 ntldr, 31 Mar 2010
    Last edited: 31 Mar 2010
  5. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    ntldr не делай так
    лучше пропиши тогда уж hInstance=GetModuleHandle(NULL); хистанс у тебя не правильный из-за не правильной главной функции она должна называться WinMain (CRT потом сам сделает все что нужно - я про юникод)
    а вообще http://msdn.microsoft.com/en-us/library/ms644996(v=VS.85).aspx
     
    _________________________
    1 person likes this.
  6. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    вот вот, я так же хотел сделать :)