2013-01-12 4 views
0

J'ai besoin d'aide pour créer un certain programme MFC. Je dois créer un programme qui va dessiner une ligne de la façon suivante: l'utilisateur choisit le point de départ en cliquant sur le bouton gauche, et le dernier point en cliquant gauche la deuxième fois, après quoi les points sont connectés et la ligne est dessinée. J'ai réussi à obtenir les coordonnées du premier avec ceci:MFC tracer une ligne

void CsemView::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
    CsemDoc* pDoc= GetDocument(); 
    // TODO: Add your message handler code here and/or call default 
    pDoc->a_pos=point; 
    Invalidate(); 
    CView::OnLButtonDown(nFlags, point); 
} 

Le problème est, je ne sais pas comment obtenir les coordonnées du second avec le second clic gauche. J'ai réussi à le faire en utilisant la fonction double clic gauche (et en y plaçant pDoc-> b_pos = point), mais ce n'est pas vraiment ce que j'étais censé faire. (Je mettais les coordonnées du premier dans MoveTo et le second dans LineTo). J'apprécierais que quelqu'un puisse m'aider (je soupçonne qu'il y a peut-être une façon différente et plus simple de faire cela). Merci d'avance.

+0

Les lignes sont habituellement établis en commençant un point sur le bouton vers le bas puis mettre fin à un point et la ligne sur le bouton haut, puis invalidant, puis dans OnDraw ou OnPaint, tirant la ligne de ces deux points. Êtes-vous sûr de vouloir faire deux descentes successives pour le faire? –

Répondre

1

Si vous souhaitez obtenir deux résultats d'un même événement, vous devez conserver une variable d'état pour suivre le clic.

En d'autres termes, votre CsemDoc devrait avoir un a_pos et b_pos membres et CsemView un bool is_b, initialisé comme fausse.

La méthode OnLButtonDow doit: être quelque chose comme

if(!is_b) 
{ set the a_pos; is_b = true; } 
else 
{ set the b_pos; is_b = false; invalidate the draw; } 
+0

Merci, c'était exactement ce dont j'avais besoin, simple et efficace! – user1973086

0

Vous pouvez pousser les coordonnées de la souris sur chaque LButtonDown vers un vecteur et tracer les lignes entre P [i] et P [i + 1] et sur un RButtonDown vous pouvez arrêter l'enregistrement des points après cela et pas plus des lignes supplémentaires seront dessinées. Avoir un bouton séparé comme n'importe quelle boîte à outils de dessin pour démarrer le dessin au trait afin que tous les événements LButtonDown après cela seront poussés vers le vecteur.

Espérons que cela aide!