Às vezes, precisamos usar VB para desenvolver rapidamente um programa de processamento de desenho de dados de teste. Alterar o cursor do mouse no controle de desenho para a forma de um cursor cruzado grande usado no software AutoCAD obterá melhores resultados do que o cursor de seta comum. Então, como implementamos um cursor cruzado tão grande?
----Primeiro de tudo, vamos esclarecer o efeito que queremos obter. Se desenharmos em um controle Picture, quando o mouse se mover para esse controle, o cursor do mouse mudará imediatamente para uma forma de cruz grande e a linha horizontal entrará. o cursor muda da borda esquerda para a borda direita do controle, a linha vertical vai da borda superior para a borda inferior do controle, ou seja, o cursor cruzado grande divide o controle de desenho em quatro quadrantes. Quando o mouse sai do controle, o cursor retorna à sua forma original.
----Para implementar tal cursor, temos que fazer isso nós mesmos desenhando linhas. Se o mouse estiver no controle de desenho, primeiro desenhe as linhas horizontais e verticais do cursor na posição atual do mouse quando a posição do mouse se mover, primeiro apague as linhas horizontais e verticais originais do cursor e, em seguida, desenhe as linhas horizontais; linhas do cursor na nova posição Linhas e linhas verticais, então temos que responder ao evento MouseMove do controle de desenho. Claro, não importa qual conteúdo esteja no controle de desenho, não podemos destruir o conteúdo original quando apagamos a linha do cursor e redesenhamos a linha do cursor. Portanto, precisamos definir o DrawMode do controle de desenho para vbXorPen (modo XOR). desenhe a linha horizontal do cursor Ao adicionar linhas verticais, use XOR para combinar as linhas horizontais e verticais. A cor do pixel é definida como o valor XOR da cor do cursor e a cor original do pixel e, em seguida, as linhas verticais e horizontais são desenhadas na mesma posição usando o método XOR e os pixels nas linhas horizontais e verticais são desenhados novamente. Uma operação XOR com a cor do cursor apagará as linhas horizontais e verticais do cursor e restaurará o conteúdo original no controle de desenho.
----Também precisamos garantir que quando o mouse se move para o controle de desenho, o cursor comum do mouse desapareça e apenas o cursor cruzado grande desenhado apareça. Portanto, a propriedade MousePointer do controle de desenho também deve ser definida como vbCuntom, que. é definido pelo usuário. Depois que a propriedade MousePointer do controle de desenho for definida como vbCustom, os gráficos correspondentes definidos pelo usuário deverão ser carregados em sua propriedade MouseIcon, pois esperamos que o controle de desenho tenha apenas o cursor que desenhamos e nenhum outro cursor, portanto, um arquivo vazio (. Gráficos de cursor transparentes. Você pode encontrar um arquivo de cursor, editá-lo através de qualquer editor de recursos, preencher todo o gráfico do cursor com transparência e salvá-lo como NoIcon.cur conforme necessário.
---- Através das principais configurações e operações acima, podemos perceber o grande cursor cruzado. Usando o método XOR para desenho, também podemos obter o efeito de "elástico" comumente visto em softwares de desenho em geral, ou seja, após usar o mouse para definir um ponto, arraste dinamicamente o mouse para definir outro ponto durante o processo de dinamicamente. arrastando o mouse, o ponto a ser desenhado é Os gráficos também mudam dinamicamente de acordo.
---- Abaixo usamos um exemplo para implementar totalmente o cursor cruzado grande no controle de desenho, e também demonstramos como usar o efeito "elástico" para desenhar um retângulo:
---- Crie um novo projeto EXE padrão em VB, adicione um controle Picture ao Form1 e defina seu nome como PicDraw. Você pode carregar um arquivo de imagem. O tamanho do PicDraw e o tamanho da imagem nele basicamente cobrem a maior parte. o Form1 é suficiente. O código de implementação é o seguinte. Este programa é executado em VB5.0.
OpçãoExplícita
PRivateOld_XAsSingle
PrivadoOld_YAsSingle
PrivateisMouseDownAsBoolean
PrivateBox_X0AsSingle
PrivateBox_Y0AsSingle
PrivateBox_X1AsSingle
PrivateBox_Y1AsSingle
PrivatePenColorAsLong
PrivateCrossColorAsLong
PrivateSubForm_Load()
CrossColor=QBColor(8)
PenColor=QBColor(15)
picDraw.DrawMode=vbXorPen
picDraw.MouseIcon=LoadPicture
(App.Path&"/no.cur")
picDraw.MousePointer=vbCustom
isMouseDown=Falso
Caixa_X0=Caixa_X1=Caixa_Y0=Caixa_Y1=0
Fim Sub
PrivateSubpicDraw_MouseDown
(ButtonAsInteger,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown = TrueThen
'Um ponto foi previamente definido com o mouse
Caixa_X1=X
Caixa_Y1=Y
isMouseDown=Falso
picDraw.DrawMode=vbCopyPen
picDraw.Line(Caixa_X0,Caixa_Y0)-
(Caixa_X1,Caixa_Y1),
CanetaCor,B
picDraw.DrawMode=vbXorPen
'Desenhe um cursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
Antigo_X=X
Antigo_Y = Y
Outro
'Define o primeiro vértice de um retângulo e depois apaga o cursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
Caixa_X0=X
Caixa_Y0=Y
isMouseDown = Verdadeiro
FimSe
Fim Sub
PrivateSubpicDraw_MouseMove(ButtonAsInteger,
ShiftAsInteger,XAsSingle,YAsSingle)
IfisMouseDown = TrueThen
'Arraste o mouse para definir outro vértice do retângulo,
Neste ponto apague o retângulo anterior e desenhe um novo retângulo
picDraw.Line(Caixa_X0,Caixa_Y0)-(Velho_X,Velho_Y),
CanetaCor,B
picDraw.Line(Box_X0,Box_Y0)-(X,Y),PenColor,B
Outro
'Apaga a linha antiga do cursor
picDraw.Line(0,Velho_Y)-(picDraw.ScaleWidth,Velho_Y),
CrossColor
picDraw.Line(Velho_X,0)-(Velho_X,picDraw.ScaleHeight),
CrossColor
'Desenha uma nova linha de cursor
picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
CrossColor
picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
CrossColor
FimSe
Antigo_X=X
Antigo_Y = Y
FimSub->