2010-03-10 91 views
0

我正在爲我的編程課程創建一個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] ...有什麼想法發生了什麼?

+0

做的每個digitWnd都有有效的值嗎? (也許檢查CreateWindowEx失敗)。此外,爲什麼WS_EX_LAYERED/WS_EX_NOACTIVATE標誌 - 這些標誌對於子窗口無效(我假設你的是) – Elemental 2010-03-10 10:35:09

+2

digitWnd的聲明是什麼? – 2010-03-10 10:55:35

+0

元素,沒有WS_CHILD標誌......如果我缺少某些東西,請糾正我。 – 2010-03-13 14:10:28

回答

1

打開Spy ++並檢查缺少的窗口是否真的丟失或只是與其他窗口重疊。可能在位置計算代碼中存在一些小錯誤,將其置於另一個窗口或屏幕之外。

+0

...並且如果您的系統上沒有Spy ++,請參閱以下代碼:http://stackoverflow.com/questions/1811019/i-want-spy-but-i-dont-have-visual-工作室 – HostileFork 2010-03-10 08:46:04

+0

負面...我試着專門在不同的地方定位窗戶,沒有成功。我還注意到,如果在循環後創建另一個「虛擬」窗口,則會顯示digitWnd [7] [6],但這不是真正的解決方案,也不能解決digitWnd [0] [ 0] :( – SirGregg 2010-03-10 08:59:46

0

爲了驗證你的創作機制,我會檢查:

  1. 數組初始化HWND digitWnd [8] [7]

  2. 如果父窗口dummyWnd有效

  3. 回報值爲CreateWindowEx() != NULL

我想到的另一點是,你創建了尺寸爲0的窗戶 - 沒有寬度或高度。因此,在CreateWindowEx中設置尺寸是個好主意(...)

0

這是您第一次打電話給ShowWindow()嗎?如果是這樣,根據MSDN,「nCmdShow:[in]指定如何顯示窗口。應用程序第一次調用ShowWindow時忽略此參數」。這可能意味着您只需撥打ShowWindow()兩次即可修復程序。試試看看它是否有效。除此之外,您可能不得不提供更多的代碼供我們查看。

相關問題