Molto più semplicemente:
codice:
#include <windows.h>
#include "resource.h"


BOOL CALLBACK DialogProc (HWND hwnd, 
                          UINT message, 
                          WPARAM wParam, 
                          LPARAM lParam);


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char * cmdParam, int cmdShow)
{
    return DialogBoxParam(hInst,MAKEINTRESOURCE(IDD_MAIN),0,DialogProc,(LPARAM)cmdShow);
}
BOOL CALLBACK DialogProc (HWND hwnd, 
                          UINT message, 
                          WPARAM wParam, 
                          LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
        ShowWindow(hwndDlg,(int)lParam);
        return TRUE;
    case WM_CLOSE:
        //Occhio: con i dialog non devi usare DestroyWindow ma EndDialog
        EndDialog(hwnd,0);
        return TRUE;
    //... altri case ...
    }
    return FALSE;
}
; infatti la DialogBoxParam include già il message loop.