第一个和最后一个窗口不显示

时间:2010-03-10 08:38:13

标签: c++ winapi

我正在为我的编程课程创建一个WinApi应用程序。该程序应该为每个“块”使用单独的窗口显示LED时钟。除了一件事之外,我已经想出了大部分内容:在创建二维窗口数组时,第一个和最后一个窗口永远不会显示出来。这是InitInstance函数的代码片段:

for (int x=0;x<8;x++)
    for (int y=0;y<7;y++) {
    digitWnd[x][y] = CreateWindowEx((WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE | WS_EX_STATICEDGE),
        szWindowClass, szTitle, (WS_POPUP| WS_BORDER), NULL, NULL, NULL, NULL, dummyWnd, NULL, hInstance, NULL);
    ShowWindow(digitWnd[x][y], nCmdShow);
    UpdateWindow(digitWnd[x][y]);
    } 

每次与窗口交互时都会使用相同的循环边界(设置位置和启用/禁用)。除了digitWnd[0][0]digitWnd[7][6]之外,所有的窗口看起来都运行正常......有关于发生了什么的任何想法?

3 个答案:

答案 0 :(得分:1)

打开Spy ++并检查丢失的窗口是否确实丢失或者是否与其他窗口重叠。您可能会在位置计算代码中出现一些小错误,将其置于另一个窗口或屏幕外部。

答案 1 :(得分:0)

要验证您的创建机制,我会检查:

  1. 数组初始化HWND digitWnd [8] [7]

  2. 如果父窗口dummyWnd有效

  3. CreateWindowEx() != NULL

  4. 的返回值

    我想到的另一点是,您创建了尺寸为0的窗口 - 没有宽度或高度。因此,在CreateWindowEx(...)

    中设置大小可能是个好主意

答案 2 :(得分:0)

这是您第一次拨打ShowWindow()吗?如果是这样,根据MSDN,“nCmdShow:[in]指定窗口的显示方式。当应用程序第一次调用ShowWindow时,将忽略此参数”。这可能意味着您只需拨打ShowWindow()两次即可修复您的计划。试一试,看看它是否有效。除此之外,您可能需要提供更多代码供我们查看。