IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

bug au demarrage d'un dialog (cursor)


Sujet :

MFC

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut bug au demarrage d'un dialog (cursor)
    j'ai ce bug à chaque fois que j'execute mon programme
    c'est sans gravité , si je fais continue le programme marche derriere, mais j'aimerais bien le supprimer
    merci beaucoup

    http://img32.imageshack.us/img32/8262/bugvwl.png

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Et c'est quoi le bug ? On doit le deviner ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    si tu veux j'ai ça :
    si je clique ignorer derrier ça marche

    mais si je pouvais supprimer ce bug ce serait bien



    l'erreur vient peut-etre du cursor d'après le message sur la 1ere image
    les seuls appel dans mon programme sont

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    ON_WM_SETCURSOR() //dans le begin message map
    ...
     
    HCURSOR CLEMonitorDlg::OnQueryDragIcon()
    {
    	return (HCURSOR) m_hIcon;
    }
    ........
     
    BOOL CLEMonitorDlg::PreTranslateMessage(MSG* pMsg) 
    {
        // Hide the tooltip on keyboard and mouse button events
        HIDE_TOOL_TIP_ON_KB_AND_MB_EVENTS(m_ttce)
     
    	// Double clicking in node list
    	if (pMsg->hwnd == m_lstNode.GetSafeHwnd()) 
    	{
     
    		// Left double-clicking copies the list entry to the Update fields
    		// and the node id field
    		if (pMsg->message == WM_LBUTTONDBLCLK) 
    		{
    			int n = m_lstNode.GetCurSel();
    			if (n >= 0) 
    			{
    				m_nNodeId = m_lstNode.GetItemData(n);
    			}
    		}
    	}
     
    	return CDialog::PreTranslateMessage(pMsg);
    }
     
    //-----------------------------------------------------------------------------
    /** \brief Handles tool tip text for all controls
     *
     *  The macros used in this function is defined in the class CToolTipCtrlEx.
     *  The text macros is defined in the header file ToolTipText.h
     */
    //-----------------------------------------------------------------------------
    BOOL CLEMonitorDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
    {
        BEGIN_TOOL_TIP_MAP(m_ttce) 
    	{
            REG_TOOL_TIP(m_ttce, m_frmSendMessage, pWnd, TIP_SEND_MESSAGE)
    		REG_TOOL_TIP(m_ttce, m_frmMessageLog, pWnd, TIP_LOG_MESSAGE)
    		REG_TOOL_TIP(m_ttce, m_frmNodeList, pWnd, TIP_NODE_LIST)
    		REG_TOOL_TIP(m_ttce, *m_pCmbComPort, pWnd, TIP_CMB_COM_PORT)
        } END_TOOL_TIP_MAP(m_ttce)
     
    	return CDialog::OnSetCursor(pWnd, nHitTest, message);
    }

  4. #4
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    salut,

    déjà 1er problème, le source affiché dans le debugger ne correspond pas à une version MFC42 (VC6) -> la classe _AFX_MOUSEANCHORWND n'existait pas à cette époque

    ensuite, le call stack indique que c'est dans CScrollView::OnPrepareDC()

    et là, il y a un certain nombre d'ASSERT ... procure toi les bons sources MFC

    @+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    merci
    le projet est compilé en VC++6, mais j'ai utilisé le debugger de VS2005
    sinon si l'erreur vient du CScrollView::onpreparedc
    c'est bizarre parce que je lance effectivement une CScrollView à l'initDialog du dialogue principal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //CCreateContext pContext;
    	CWnd* pFrameWnd = this;
    	pContext.m_pCurrentDoc = new CMyDocument;
    	pContext.m_pNewViewClass = RUNTIME_CLASS(CMyVw);
    	pView =(CMyVw *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
    	ASSERT(pView);
    	pView->ShowWindow(SW_NORMAL);
    	CRect rectWindow;
    	//GetWindowRect(rectWindow);
    	rectWindow.top=400;
    	rectWindow.bottom=800;
    	rectWindow.left=10;
    	rectWindow.right=410;
    	pView->MoveWindow(rectWindow);
    comme ça

    par contre ma CScrollView ne (re)définit pas de OnPrepareDC
    est-ce que ASSERT(pView) appelle OnPrepareDC?

  6. #6
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    c'est dans VIEWSCRL.CPP ligne 134, comme indiqué dans la boite de dialogue
    reste à consutler les sources MFC (les bons, ceux de VC6) pour voir pourquoi ...

    @+

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ifdef _DEBUG
    	if (m_nMapMode == MM_NONE)
    	{
    		TRACE0("Error: must call SetScrollSizes() or SetScaleToFitSize()");
    		TRACE0("\tbefore painting scroll view.\n");
    		ASSERT(FALSE); << ligne 134
    		return;
    	}
    #endif //_DEBUG
    apparemment je dois mettre utilise onPreparedc et faire un setscrollsize dedans
    je met à jour la scroll size dans le onDraw(CDC* pDC)
    c'est bizarre de devoir refaire ça dans on prepare dc
    et ce probleme je l'ai que en Debug
    void CMyVw::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Le SetScrollSize() peut aussi être fait dans OnInitialUpdate()
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    je met à jour la scroll size dans le onDraw(CDC* pDC)
    c'est bizarre de devoir refaire ça dans on prepare dc
    OnPrepareDC est appelé juste avant OnDraw ...

    c'est pas dans OnDraw qu'il faut appeler cette fonction, mais dans OnInitialUpdate(), comme le dis ram-0000 et à chaque fois que tu as besoin de changer la taille de la zone de défilement.

    @+

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    le setscrollsize etait deja dans le onInitialUpdate

    sinon bon j'ai enlevé le setscrollsize du onDraw c'est vrai que ça doit ralentir le programme
    mais en fait ma scrollView est zoomé par un click droit et dezoomé par click gauche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    void CMyVw::OnDraw(CDC* pDC)
    {
    	SetMapMode(pDC);
     
     
    	DrawGrid(pDC);
    	//pDC->BitBlt(0,0,m_nBmpWidth,m_nBmpHeight,&m_MemDC,0,0,SRCCOPY);
     
    	pDC->SelectStockObject(BLACK_BRUSH);
     
    	if (m_refCnt)
    	for (int i=0;i<m_refCnt;i++)
    		pDC->Rectangle(m_ref[i].x*10-5,m_ref[i].y*10-5,m_ref[i].x*10+5,m_ref[i].y*10+5);
    	pDC->SelectStockObject(GRAY_BRUSH);
    	if (m_blindCnt)
    	for (int j=0;j<m_blindCnt;j++)
    		pDC->Rectangle(m_blind[j].x*10-5,m_blind[j].y*10-5,m_blind[j].x*10+5,m_blind[j].y*10+5);
     
     
    }
     
    int CMyVw::SetMapMode(CDC* pDC)
    {
    	int previousMode = pDC->SetMapMode(MM_ISOTROPIC);
    	pDC->SetWindowExt(100,100);
    	//pDC->SetViewportOrg(CPoint(0,0));
    	pDC->SetViewportExt(10*m_zoomFactor,10*m_zoomFactor);
     
    	return previousMode;
    }
     
    // CMyVw message handlers
     
     
    void CMyVw::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    	m_zoomFactor+=2;
    	SetScrollSizes(MM_TEXT,CSize(65*m_zoomFactor,65*m_zoomFactor));
    	Invalidate(TRUE);
    }
     
     
    void CMyVw::OnRButtonDown(UINT nFlags, CPoint point) 
    {
    	m_zoomFactor-=2;
    	SetScrollSizes(MM_TEXT,CSize(65*m_zoomFactor,65*m_zoomFactor));
    	Invalidate(TRUE);
    }
    au depart j'avais mis le setScrollSize dans le setMapMode, maintenant il est dans les click droit/gauche, mais à chaque onDraw , setMapMode est appelé et ça adapte le viewPort , alors que le zoom change seulement par 1 click.
    Je sais pas comment allégé la fonction onDraw , il faudrait que je modifie une CDC en interne et que la dessine
    ce serait sympa de m'aider pour faire ça, parceque c'est sur qu'actuellement le programme fait beaucoup d'operations inutiles, quoique je sais pas à quelle frequence est appelé onDraw, si elle est appelé à chaque evenement souris ou clavier, et bien ça va pour mon programme

    merci beaucoup pour l'aide

Discussions similaires

  1. bug au demarrage de le 'application
    Par hi-wave dans le forum Windows Forms
    Réponses: 0
    Dernier message: 03/07/2015, 18h14
  2. bug demarrage GlassFish
    Par cotede2 dans le forum Glassfish et Payara
    Réponses: 4
    Dernier message: 09/04/2008, 10h13
  3. Bug demarrage (écran bleu) suite au SP1
    Par Bouki dans le forum Windows Vista
    Réponses: 0
    Dernier message: 24/03/2008, 10h24
  4. bug du programme apres utilisation de dialog
    Par avogadro dans le forum Delphi
    Réponses: 13
    Dernier message: 07/06/2006, 15h33
  5. [Swing] bug avec Dialog
    Par shinkyo dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 01/03/2006, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo