s594102234 2015-05-27 07:01 采纳率: 100%
浏览 2936
已采纳

win32编程中窗口不显示是什么问题

《windows程序设计》第9章ENVIRON程序
把光盘中的源代码粘贴出来发现还是没有窗口在运行,实在想不明白
(运行环境:VS2013,WINDOWS7)
以下源代码:

#include

#define ID_LIST 1
#define ID_TEXT 2

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Environ") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;

 wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
 wndclass.lpfnWndProc   = WndProc ;
 wndclass.cbClsExtra    = 0 ;
 wndclass.cbWndExtra    = 0 ;
 wndclass.hInstance     = hInstance ;
 wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
 wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
 wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ;
 wndclass.lpszMenuName  = NULL ;
 wndclass.lpszClassName = szAppName ;

 if (!RegisterClass (&wndclass))
 {
      MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                  szAppName, MB_ICONERROR) ;
      return 0 ;
 }

 hwnd = CreateWindow (szAppName, TEXT ("Environment List Box"),
                      WS_OVERLAPPEDWINDOW,
                      CW_USEDEFAULT, CW_USEDEFAULT,
                      CW_USEDEFAULT, CW_USEDEFAULT,
                      NULL, NULL, hInstance, NULL) ;

 ShowWindow (hwnd, iCmdShow) ;
 UpdateWindow (hwnd) ;

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

}

void FillListBox (HWND hwndList)
{
int iLength ;
TCHAR * pVarBlock, * pVarBeg, * pVarEnd, * pVarName ;

 pVarBlock = GetEnvironmentStrings () ;  // Get pointer to environment block

 while (*pVarBlock)
 {
      if (*pVarBlock != '=')   // Skip variable names beginning with '='
      {
           pVarBeg = pVarBlock ;              // Beginning of variable name
           while (*pVarBlock++ != '=') ;      // Scan until '='
           pVarEnd = pVarBlock - 1 ;          // Points to '=' sign
           iLength = pVarEnd - pVarBeg ;      // Length of variable name

                // Allocate memory for the variable name and terminating
                // zero. Copy the variable name and append a zero.

           pVarName = calloc (iLength + 1, sizeof (TCHAR)) ;
           CopyMemory (pVarName, pVarBeg, iLength * sizeof (TCHAR)) ;
           pVarName[iLength] = '\0' ;

                // Put the variable name in the list box and free memory.

           SendMessage (hwndList, LB_ADDSTRING, 0, (LPARAM) pVarName) ;
           free (pVarName) ;
      }
      while (*pVarBlock++ != '\0') ;     // Scan until terminating zero
 }
 FreeEnvironmentStrings (pVarBlock) ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND hwndList, hwndText ;
int iIndex, iLength, cxChar, cyChar ;
TCHAR * pVarName, * pVarValue ;

 switch (message)
 {
 case WM_CREATE :
      cxChar = LOWORD (GetDialogBaseUnits ()) ;
      cyChar = HIWORD (GetDialogBaseUnits ()) ;

           // Create listbox and static text windows.

      hwndList = CreateWindow (TEXT ("listbox"), NULL,
                          WS_CHILD | WS_VISIBLE | LBS_STANDARD,
                          cxChar, cyChar * 3,
                          cxChar * 16 + GetSystemMetrics (SM_CXVSCROLL),
                          cyChar * 5,
                          hwnd, (HMENU) ID_LIST,
                          (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
                          NULL) ;

      hwndText = CreateWindow (TEXT ("static"), NULL,
                          WS_CHILD | WS_VISIBLE | SS_LEFT,
                          cxChar, cyChar, 
                          GetSystemMetrics (SM_CXSCREEN), cyChar,
                          hwnd, (HMENU) ID_TEXT,
                          (HINSTANCE) GetWindowLong (hwnd, GWL_HINSTANCE),
                          NULL) ;

      FillListBox (hwndList) ;
      return 0 ;

 case WM_SETFOCUS :
      SetFocus (hwndList) ;
      return 0 ;

 case WM_COMMAND :
      if (LOWORD (wParam) == ID_LIST && HIWORD (wParam) == LBN_SELCHANGE)
      {
                // Get current selection.

           iIndex  = SendMessage (hwndList, LB_GETCURSEL, 0, 0) ;
           iLength = SendMessage (hwndList, LB_GETTEXTLEN, iIndex, 0) + 1 ;
           pVarName = calloc (iLength, sizeof (TCHAR)) ;
           SendMessage (hwndList, LB_GETTEXT, iIndex, (LPARAM) pVarName) ;

                // Get environment string.

           iLength = GetEnvironmentVariable (pVarName, NULL, 0) ;
           pVarValue = calloc (iLength, sizeof (TCHAR)) ;
           GetEnvironmentVariable (pVarName, pVarValue, iLength) ;

                // Show it in window.

           SetWindowText (hwndText, pVarValue) ;
           free (pVarName) ;
           free (pVarValue) ;
      }
      return 0 ;

 case WM_DESTROY :
      PostQuitMessage (0) ;
      return 0 ;
 }
 return DefWindowProc (hwnd, message, wParam, lParam) ;

}
运行时没有显示错误
图片说明

  • 写回答

4条回答

  • oyljerry 2015-05-27 07:27
    关注

    估计窗口没有创建成功等,失败了,你可以设置断点跟踪一下,看你的代码在哪里出错了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题