Control Perso, comment faire ??

crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 - 8 avril 2003 à 16:02
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 9 avril 2003 à 13:32
Salut a tous,

Dans mon prog, il faut que je puisse configurer l'impression du header, footer, numero de ligne, sachant que l'utilisateur a le choix de mettre n'importe ou ou il le veut (header gauche,milieu,droit et footer gauche,milieu,bas) le nom du programme ou la date ou le nombre de pages. Pour le traitement c'est bon, mais c'est pour l'UI que je sais pas trop comment faire : comment je peut creer un control qui ressemble a une mini-feuille et voir dedans ou sont placer le infos, et clicker dessus pour en changer. J'avais penser faire ca avec des Combo-box mais c'est vraiment pas top.

Il me faidrai juste un point de départ et apres je devrais me débrouiller. (de quel classe doit-je dériver, etc...)

Merci a vous,Hart

7 réponses

cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
8 avril 2003 à 23:43
En fait dérive un contrôle de CStatic et surcharge le paint pour afficher ce que tu veux. Bon courage :-)

Kaid - kaid.fr.st
0
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
9 avril 2003 à 10:04
J'arrive bien a afficher a peut pres ce que je veux, mais j'arrive pas a recuperer les evenements (click,et...). J'ai encore jamais fait de controles perso donc c'est un peut galere pour moi :

#include "stdafx.h"
#include "Control.h"
#include "MiniFeuille.h"

// CMiniFeuille

IMPLEMENT_DYNAMIC(CMiniFeuille, CStatic)
CMiniFeuille::CMiniFeuille()
{
}

CMiniFeuille::~CMiniFeuille()
{
}

BEGIN_MESSAGE_MAP(CMiniFeuille, CStatic)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

// Gestionnaires de messages CMiniFeuille

LRESULT CMiniFeuille::WindowProc(UINT message,WPARAM wParam,LPARAM lParam)
{
switch (message)
{
case WM_MOUSEMOVE:
Beep(2000,10);

}

return CStatic::WindowProc(message,wParam,lParam);
}

void CMiniFeuille::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(rect);

CString s = "Hello, Windows!";
dc.SetTextAlign(TA_BASELINE | TA_CENTER);
dc.SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
dc.SetBkMode(TRANSPARENT);
dc.Rectangle(rect.left,rect.top,rect.right,rect.bottom);
dc.TextOut(rect.right / 2, rect.bottom / 2, s);

}

void CMiniFeuille::OnLButtonDown(UINT nFlags, CPoint point)
{

}

Il passe bien dans le WindowProc et le OnPaint mais pas dans OnLButtonDown. Je sais pas si ca un rapport avec CStatic qui ne renvoi pas d'evenement de click. Sinon, pourquoi ne pas dériver ma classe de CWnd ?

Merci pour ton aide precieuse ...

Hart
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
9 avril 2003 à 10:19
Oui c'est vrai, tu peux partir de CWnd. Par contre, si je peux te donner un conseil, ne mélange pas les deux façons de récupérer un message à savoir la surcharge de WindowProc et l'utilisation de MESSAGE_MAP. MESSAGE_MAP est plus simple.

Mais qu'est ce que tu veux faire avec l'événement click-gauche ? Je croyais que tu fesais seulement un contrôle d'affichage.

Kaid - kaid.fr.st
0
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
9 avril 2003 à 10:28
J'avais mélanger les 2 façon juste pour le test...
En fait il me faut le click gauche car le control sert a afficher une sorte de mini-page avec header et footer, et il faut que quand je click sur l'header ou le footer de cette mini page, une combo-box apparaisse pour faire le choix de ce que j'y met. En résumé, il faut que je recupere les evenements (click,etc...). Est-ce que ca peut marcher avec CStatic ou il faut que je le fasse avec CWnd (comment faire ??).

Thanks, Hart
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
9 avril 2003 à 12:02
Le plus simple est donc de dériver un contrôle de CWnd. Dans ce contrôle, tu surcharges le paint et le click gauche. Il faut ensuite que tu testes dans quelle zone de la mini feuille l'utilisateur a clické et ensuite je pense que le plus simple c'est d'ouvrir une CDialog où l'utilisateur pourra paramètrer son impression. A toi de voir ensuite si le texte saisie par l'utilisateur est affichable sur ta mini feuille. Si il a saisie trois tonnes de texte, l'affichage sera dur.

Kaid - kaid.fr.st
0
crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
9 avril 2003 à 13:25
J'ai vu dans la MSDN qu'il était préferable de créer un control ActiveX, qu'en pense tu? J'ai commencé avec l'appwizard et je pense (j'espere) avoir des résultat.

Sinon merci pour ton aide, a+
Hart
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
9 avril 2003 à 13:32
Je trouve la solution pas géniale. ActiveX est plus long à mettre en place et à développer qu'un simple subclassing.
L'intérêt d'ActiveX est de partager les composants entres VB, VC++, IE, ..., mais il ne faut pas oublier d'enregistrer le contrôle sur la machine cliente.

Kaid - kaid.fr.st
0
Rejoignez-nous