// dialog.cpp : Defines the entry point for the application.
//#include "stdafx.h"
#include "resource.h"BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
{
EndDialog(hwndDlg, LOWORD(wParam));
return TRUE;
}
break;
}
    return FALSE;
}int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, (DLGPROC)DialogProc);
return 0;
}我用VC6.0新建了一个Win32应用程序,不使用MFC,然后添加了一个对话框资源,运行后并没有
显示对话框,这是怎么回事?该怎么修改?

解决方案 »

  1.   

    Use this one to replace yours.DialogBox(hInstance, LPCTSTR(IDD_DIALOG), hWnd, (DLGPROC)DialogProc );
      

  2.   

    hInstance 你的这个在窗体没有 create的时候是没有实例的
    你要在WM_CREATE后在获得他的instance handle :
    在 case WM_CREATE 后加入:
    static HISTANCE hInstance  ;
    hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;DialogBox(hInstance, LPCTSTR(IDD_DIALOG), hWnd, (DLGPROC)DialogProc );也就是说你在 main 函数中的DialogBox 是执行不成功的所以没有Dia出现,像我写的那样就可以显示dia了
      

  3.   

    to mixtrue: 那个hWnd是哪里来的
      

  4.   

    你不能在main函数中写,你在WndProc 函数中写
      

  5.   

    如:
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
    static HINSTANCE hInstance ;


    switch (message) 
    {
    case WM_CREATE : {
    hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
    DialogBox(hInst, MAKEINTRESOURCE(IDI_SMALL) , NULL, (DLGPROC)WndDialog1);
    return 0;
    }
      

  6.   

    我得意思是可不可以运行时就显示那个资源对话框,不要在程序里使用其它窗口,WndProc是主窗口的消息循环吧,可是我的程序没有任何窗口,只有一个对话框资源。
      

  7.   

    IDD_DIALOG这个资源对话框你定义了么?
      

  8.   

    #include <windows.h>
    #include <winsock.h>
    #include "resource.h"LRESULT WINAPI WndProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
    BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    WNDCLASS wndclass;
    HWND hwnd;
    MSG msg; wndclass.style        = CS_HREDRAW|CS_VREDRAW;
    wndclass.lpfnWndProc  = WndProc;
    wndclass.cbClsExtra   = 0;
    wndclass.cbWndExtra   = 0;
    wndclass.hInstance    = hInstance;
    wndclass.hCursor      = LoadCursor(NULL,IDC_ARROW);
    wndclass.hIcon        = NULL;
    wndclass.hbrBackground= (HBRUSH) GetStockObject(WHITE_BRUSH);
    wndclass.lpszClassName= "SDK Window";
    wndclass.lpszMenuName = NULL; RegisterClass(&wndclass);  // Register window.
    hwnd = CreateWindow("SDK Window",
    "SDK",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    NULL,
    NULL,
    hInstance,
    NULL);

    ShowWindow(hwnd,SW_SHOWNORMAL);
    UpdateWindow(hwnd);

    while(GetMessage(&msg,NULL,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }

    return 0;
    }LRESULT WINAPI WndProc(HWND hwnd,
       UINT uMsg,
       WPARAM wParam,
       LPARAM lParam)
    {
    HINSTANCE hInstance;

    switch(uMsg)
    {
    case WM_CREATE:
    hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
    DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG),hwnd, (DLGPROC)DialogProc);
    break;
    case WM_PAINT:
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd,uMsg,wParam,lParam);
    }
    return 0;
    }BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    switch (uMsg)
    {
    case WM_INITDIALOG:
    return TRUE;
    case WM_COMMAND:
    if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
    {
    EndDialog(hwndDlg, LOWORD(wParam));
    return TRUE;
    }
    break;
    }
        return FALSE;
    }
      

  9.   

    楼上的兄台,我得程序里没有主窗口,不用CreateWindow创建窗口,把那个对话框资源显示出来
      

  10.   

    #include "stdafx.h"
    你把它改为下面的试#include "windows.h"
      

  11.   

    也可以试试新建一个新的WIN32空工程,不要用VC自己生成的(不要包含#include "stdafx.h"),
    以前我都遇到过.
      

  12.   

    http://home.nuc.edu.cn/~titilima/dialog.zip
    楼主试试这个程序,如果不行的话,那可能就是你的VC有问题了。
      

  13.   

    CreateDialogParam中設置WS_VISIBLE style