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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top