Determine se um ret é visível dentro da janela
Pergunta
Gostaria de determinar se um reto dentro de uma janela está completamente visível.
Eu achei o retvisível, mas essa função determina se alguma parte do ret é visível, quero saber se todo o ret é visível.
Existe alguma função para isso?
Solução
Primeiro coloque a região de recorte do sistema (a região visível de uma janela) em uma região usando GetRandomRgn
. Leia mais sobre a 'região do sistema' aqui. Em seguida, compense essa região, pois está nas coordenadas da tela (o artigo que vinculei tem um exemplo). Depois disso, crie uma região a partir do seu retângulo com CreateRectRgn
e combine as partes da sua 'região do retângulo' com aquelas que não fazem parte da 'região do sistema': isso está chamando CombineRgn
Passando a região do retângulo como a primeira região e a região do sistema como a segunda região, e RGN_DIFF
Enquanto o fnCombineMode
. Se o resultado for NULLREGION
Em seguida, seu retângulo é totalmente visível - ele não é total ou parcialmente coberto por nenhuma janela (nível superior ou não), ou não é total ou parcialmente fora da tela.
Em suma, há uma probabilidade de você estar abordando o seu problema da maneira errada. Se você disse o que está tentando alcançar, alguém provavelmente poderia sugerir uma abordagem mais simples.
Outras dicas
Usar Ptvisible em cada canto do retângulo.
A função PTVisible determina se o ponto especificado está dentro da região de recorte de um contexto de dispositivo.
Você pode fazer uma comparação simples usando as coordenadas da janela e do retângulo.
Verifique a ordenada esquerda do retângulo está à direita da borda esquerda da janela; A ordenada direita está à esquerda da borda direita da janela; E semelhante para o topo e o fundo?
A única ruga pode ser se você estiver usando coordenadas lógicas e físicas; nesse caso, precisará executar uma transformação.