2017-02-11 28 views
-1

我試圖從一些類似的程序中實際找到一個靜態標籤。我發現其中一個靜態標籤沒有'WS_VISIBLE'風格,但仍然在其中一個程序中可見。如果在窗口上沒有WS_VISIBLE,可以導致「靜態」標籤可見

那麼,如果沒有'WS_VISIBLE'風格,會導致靜態標籤可見?我怎樣才能區分它不是沒有'WS_VISIBLE'不可見的其他標籤?


我寫了一個示例代碼來重現案件,但失敗了。

TEST_METHOD(ShouldSetWindowsLong) { 
    auto handle = HWND(0x00180BDC); // A handle to another similar visible Static 
    auto style = (DWORD)::GetWindowLong(handle, GWL_STYLE); 
    style &= ~WS_VISIBLE; 
    ::SetWindowLong(handle, GWL_STYLE, style); 
} 

運行上面的代碼後,'靜態'標籤沒有'WS_STYLE',並且不再可見。

+5

另一種可能性是,您看到的文本不是由靜態控件繪製,而是由其他人繪製。無形的靜態標籤用於訪問。 –

+0

不要放棄理解,我正在使用SPY ++來查找這些問題。我看到的是靜態標籤包含可見文本,但沒有WS_VISIBLE。 – user1633272

+0

你發現了一個不可見的靜態控件,所以它的文本沒有被繪製。但也許有人*正在繪製文本。 –

回答

0

那麼,如果沒有'WS_VISIBLE'風格,會導致靜態標籤可見?

的WS_VISIBLE風格,可以打開和關閉由SetWindowLong不影響可見度轉動。調用ShowWindow,ShowWindowAsyncSetWindowPos將設置WS_VISIBLE標誌以反映實際可見性。

我怎樣才能區分它不可見的其他標籤 沒有'WS_VISIBLE'?

以編程方式,如果您不控制該窗口,則不能。

+0

因此,如果是這種情況,那麼可能是'靜態'最初是可見的,但後來'WS_VISIBLE'被'SetWindowsLog'刪除。我會寫一個示例代碼來證明它。 – user1633272

+0

似乎SetWindowLong正在影響能見度! – user1633272

+0

好消息。 Windows正在發展,儘管這些文檔說:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644898(v=vs.85).aspx「某些窗口數據緩存,所以改變你使用SetWindowLongPtr在調用SetWindowPos函數之前不會生效。「 – Laszlo

相關問題