Вопрос

I wrote a super simple ATL dialog inside a project. Even when I noted that every example on the web implemented the CDialogImpl class inline (that is, the class definition and it's implmentation where in the definition itself) I wrote it normally, separating my definition in a .h file and implementation in a .cpp file. This class is summarized below:

CMainDialog.hpp

class CMainDialog: public CDialogImpl<CMainDialog>
{
public:
    enum { IDD = IDD_MYDIALOGS_DIALOG};

    BEGIN_MSG_MAP(CMainDialog)
        MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
        COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
    END_MSG_MAP()

    CMainDialog();
    ~CMainDialog();

    LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, 
        BOOL& bHandled);

    LRESULT OnCancel(UINT uMsg, WORD wID, HWND hWndCtl, BOOL& bHandled);
}

CMainDialog.cpp

CMainDialog::CMainDialog()
{
}
CMainDialog::~CMainDialog()
{
}
LRESULT CMainDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, 
    BOOL& bHandled)
{
}
LRESULT CMainDialog::OnCancel(UINT uMsg, WORD wID, HWND hWndCtl, 
                              BOOL& bHandled)
{
}

If I call this class from the same project, everything goes fine. The dialog shows. Example:

Calling DoModal

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    CMainDialog dialog;
    dialog.DoModal();

    return 0;
}

So I converted this project from .exe to static library and removed _tWinMain. So, if I create a new ATL project, reference my newly created library and call CMainDialog.DoModal ... well, nothing happens. The constructor does get called, but the messages never start dispatching and the program ends inmediatly. Maybe I'm missing something?

I'm totally new to Win32 programming (although definitely not new to c++) so any help would be appreciated.

Это было полезно?

Решение

A static library does not have resources associated with it. Most likely the dialog code is trying to load the dialog template from the program resources but can't find it.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top