//下面的代码几乎都是抄孙鑫的视频教程里面来的,我在VC6里面能编译能过,但是运行时就是不显示窗口,但在进程里面却发现有在运行。
//请问这到底是怎么回事啊?? 由于一直以来都是在用MinGw来写C++,对于VC不是太了解。我也想知道VC6的补丁版本怎样查,不知我的要不要装补丁。
//谢谢了! 希望以后多指教!!!
#include<windows.h>
#include<stdio.h>LRESULT CALLBACK WinSunProc(
HWND Hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);int WINAPI WinMain(
   HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   LPSTR lpCmdLine,
   int nShowCmd
   )
{
   WNDCLASS wndcls;
   wndcls.cbClsExtra=0;
   wndcls.cbClsExtra=0;
   wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
   wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
   wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
   wndcls.hInstance=hInstance;
   wndcls.lpfnWndProc=WinSunProc;
   wndcls.lpszClassName="Hello Dan";
   wndcls.lpszClassName=NULL;
   wndcls.style=CS_HREDRAW | CS_VREDRAW;   RegisterClass(&wndcls);
   HWND hwnd;
   hwnd=CreateWindow("Love SDK","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
   ShowWindow(hwnd,SW_SHOWNORMAL);
   UpdateWindow(hwnd);   MSG msg;   while(GetMessage(&msg,NULL,0,0))
   {
     TranslateMessage(&msg);
 DispatchMessage(&msg);
   }
   return 0;
}LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
  switch(uMsg)
  {
  case WM_CHAR:
  char szChar[20];
  sprintf(szChar,"Char is %d",wParam);
  MessageBox(hwnd,szChar,"Hello",0);
  break;
  case WM_LBUTTONDOWN:
      MessageBox(hwnd,"Mouse clicked ","World",0);
  HDC hdc;
  hdc=GetDC(hwnd);
  TextOut(hdc,0,50,"Computer science",strlen("Computer science"));
  ReleaseDC(hwnd,hdc);
  break;
  case WM_PAINT:
  HDC dc;
  PAINTSTRUCT ps;
  dc=BeginPaint(hwnd,&ps);
  TextOut(dc,0,0,"Sun Java",strlen("Sum Java"));
  EndPaint(hwnd,&ps);
  break;
  case WM_CLOSE:
  if(IDYES==MessageBox(hwnd,"Do you really want to exit?","EXIT",MB_YESNO))
  {
    DestroyWindow(hwnd);
  }
  break;
  case WM_DESTROY:
  PostQuitMessage(0);
      break;
  default:
  return DefWindowProc(hwnd,uMsg,wParam,lParam);    
  }
  return 0;
}

解决方案 »

  1.   

    事先,新建一个Wind32 Application的简单工程,然后将代码填进去试试。
      

  2.   

    相当于C语言的hello world 程序~~~~~~
      

  3.   

    我建的就是Wind32   Application空白工程再手抄一遍填平上来的。但就是不能显示,但我直接用随同视频一起的代码就完全没有问题。
    请问有谁遇到过这样的问题吗?
    Thanks
      

  4.   

    1.
    wndcls.cbClsExtra=0;
       wndcls.cbClsExtra=0;
    cbWndExtra;2.
    CreateWindow("Hello Dan"....
      

  5.   

    wndcls.lpszClassName="Hello Dan";
       wndcls.lpszClassName=NULL;
    你最好在比对比对
      

  6.   


    #include<windows.h>
    #include<stdio.h>LRESULT CALLBACK WinSunProc(
                                HWND Hwnd,
                                UINT uMsg,
                                WPARAM wParam,
                                LPARAM lParam
                                );int WINAPI WinMain(
                       HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPSTR lpCmdLine,
                       int nShowCmd
                       )
    {
       WNDCLASS wndcls;
       wndcls.cbClsExtra=0;
       wndcls.cbWndExtra=0;
       wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
       wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
       wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
       wndcls.hInstance=hInstance;
       wndcls.lpfnWndProc=WinSunProc;
       wndcls.lpszClassName="Hello Dan";
       wndcls.lpszMenuName=NULL;
       wndcls.style=CS_HREDRAW | CS_VREDRAW;   RegisterClass(&wndcls);
       HWND hwnd;
       hwnd=CreateWindow("Hello Dan","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
       ShowWindow(hwnd,SW_SHOWNORMAL);
       UpdateWindow(hwnd);   MSG msg;   while(GetMessage(&msg,NULL,0,0))
       {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
       }
       return 0;
    }LRESULT CALLBACK WinSunProc(
      HWND hwnd,      // handle to window
      UINT uMsg,      // message identifier
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    )
    {
      switch(uMsg)
      {
      case WM_CHAR:
          char szChar[20];
          sprintf(szChar,"Char is %d",wParam);
          MessageBox(hwnd,szChar,"Hello",0);
          break;
      case WM_LBUTTONDOWN:
          MessageBox(hwnd,"Mouse clicked ","World",0);
          HDC hdc;
          hdc=GetDC(hwnd);
          TextOut(hdc,0,50,"Computer science",strlen("Computer science"));
          ReleaseDC(hwnd,hdc);
          break;
      case WM_PAINT:
          HDC dc;
          PAINTSTRUCT ps;
          dc=BeginPaint(hwnd,&ps);
          TextOut(dc,0,0,"Sun Java",strlen("Sum Java"));
          EndPaint(hwnd,&ps);
          break;
      case WM_CLOSE:
          if(IDYES==MessageBox(hwnd,"Do you really want to exit?","EXIT",MB_YESNO))
          {
            DestroyWindow(hwnd);
          }
          break;
      case WM_DESTROY:
          PostQuitMessage(0);
          break;
      default:
          return DefWindowProc(hwnd,uMsg,wParam,lParam);    
      }
      return 0;
    }
      

  7.   

    恩,抄的时候不要乱改,先搞清楚原理再去改。
       wndcls.lpszClassName="Hello Dan"; //窗口类的名称是"Hello Dan"
    //   wndcls.lpszClassName=NULL; //错了,上面赋值了,怎么又改成NULL?
       wndcls.style=CS_HREDRAW | CS_VREDRAW;   RegisterClass(&wndcls);
       HWND hwnd;
    //   hwnd=CreateWindow("Love SDK","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
       hwnd=CreateWindow("Love Dan","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
    //创建的窗口类要和注册的一致,最好用一个变量来保存这个窗口类名成,防止输入错误
      

  8.   

    被转晕了,应该这样:
       hwnd=CreateWindow("Hello Dan","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
    所以说用一个变量来保存窗口类名是多么有必要。
      

  9.   

    基本就是wndcls里的成员都得赋值~
      

  10.   

    窗口  wndcls.lpszClassName="Hello Dan";
       wndcls.lpszClassName=NULL;和 创建的类名不一致
      

  11.   

    1.
    wndcls.cbClsExtra=0;
    wndcls.cbClsExtra=0;
    上面两句话改为:
    wndcls.cbClsExtra=0;
    wndcls.cbWndExtra=0;2. 
    wndcls.lpszClassName="Hello Dan";
    wndcls.lpszClassName=NULL;
    上面两句改为:
    wndcls.lpszClassName="Hello Dan";
    wndcls.lpszMenuName=NULL;3.
    hwnd=CreateWindow("Love SDK","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);
    修改为:
    hwnd=CreateWindow("Hello Dan","Love Linux",WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);