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
Version imprimable
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
Et c'est quoi le bug ? On doit le deviner ?
si tu veux j'ai �a :
si je clique ignorer derrier �a marche
mais si je pouvais supprimer ce bug ce serait bien
http://img16.imageshack.us/img16/6620/bugge.png
l'erreur vient peut-etre du cursor d'apr�s le message sur la 1ere image
les seuls appel dans mon programme sont
Code:
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); }
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
@+
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
comme �aCode:
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);
par contre ma CScrollView ne (re)d�finit pas de OnPrepareDC
est-ce que ASSERT(pView) appelle OnPrepareDC?
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 ...
@+
apparemment je dois mettre utilise onPreparedc et faire un setscrollsize dedansCode:
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
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)
Le SetScrollSize() peut aussi �tre fait dans OnInitialUpdate()
OnPrepareDC est appel� juste avant OnDraw ... :aie:Citation:
je met � jour la scroll size dans le onDraw(CDC* pDC)
c'est bizarre de devoir refaire �a dans on prepare dc
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.
@+
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
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.Code:
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); }
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