Mausflackern



  • Webspace stelle ich dir (falls du keinen hast), mails einfach an estartu_de@c-plusplus.net aber vergiß bitte nicht, vorher den Debugordner aufzuräumen. 🙂



  • Habe leider kein Webspace, daher nehme ich jetzt das kleinere Projekt. Müsste auch gehen. Den ID_TIMER habe ich anhand des ResourceView-Fenster auf 101 gelegt:

    // MyDoublebuffer.cpp : Defines the class behaviors for the application.
    //
    
    #include "stdafx.h"
    #include "MyDoublebuffer.h"
    #include "MyDoublebufferDlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    // CMyDoublebufferApp
    
    BEGIN_MESSAGE_MAP(CMyDoublebufferApp, CWinApp)
    	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    END_MESSAGE_MAP()
    
    // CMyDoublebufferApp construction
    
    CMyDoublebufferApp::CMyDoublebufferApp()
    {
    	// TODO: add construction code here,
    	// Place all significant initialization in InitInstance
    }
    
    // The one and only CMyDoublebufferApp object
    
    CMyDoublebufferApp theApp;
    
    // CMyDoublebufferApp initialization
    
    BOOL CMyDoublebufferApp::InitInstance()
    {
    	// InitCommonControls() is required on Windows XP if an application
    	// manifest specifies use of ComCtl32.dll version 6 or later to enable
    	// visual styles.  Otherwise, any window creation will fail.
    	InitCommonControls();
    
    	CWinApp::InitInstance();
    
    	AfxEnableControlContainer();
    
    	// Standard initialization
    	// If you are not using these features and wish to reduce the size
    	// of your final executable, you should remove from the following
    	// the specific initialization routines you do not need
    	// Change the registry key under which our settings are stored
    	// TODO: You should modify this string to be something appropriate
    	// such as the name of your company or organization
    	SetRegistryKey(_T("Local AppWizard-Generated Applications"));
    
    	CMyDoublebufferDlg dlg;
    	m_pMainWnd = &dlg;
    	INT_PTR nResponse = dlg.DoModal();
    	if (nResponse == IDOK)
    	{
    		// TODO: Place code here to handle when the dialog is
    		//  dismissed with OK
    	}
    	else if (nResponse == IDCANCEL)
    	{
    		// TODO: Place code here to handle when the dialog is
    		//  dismissed with Cancel
    	}
    
    	// Since the dialog has been closed, return FALSE so that we exit the
    	//  application, rather than start the application's message pump.
    	return FALSE;
    }
    
    // MyDoublebufferDlg.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "MyDoublebuffer.h"
    #include "MyDoublebufferDlg.h"
    #include ".\mydoublebufferdlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    // CAboutDlg dialog used for App About
    
    class CAboutDlg : public CDialog
    {
    public:
    	CAboutDlg();
    
    // Dialog Data
    	enum { IDD = IDD_ABOUTBOX };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    
    // Implementation
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    END_MESSAGE_MAP()
    
    // CMyDoublebufferDlg dialog
    
    CMyDoublebufferDlg::CMyDoublebufferDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CMyDoublebufferDlg::IDD, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    	counter = 0;
    }
    
    void CMyDoublebufferDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CMyDoublebufferDlg, CDialog)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_WM_TIMER()
    	ON_WM_ERASEBKGND()
    END_MESSAGE_MAP()
    
    // CMyDoublebufferDlg message handlers
    
    BOOL CMyDoublebufferDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Add "About..." menu item to system menu.
    
    	// IDM_ABOUTBOX must be in the system command range.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// Set the icon for this dialog.  The framework does this automatically
    	//  when the application's main window is not a dialog
    	SetIcon(m_hIcon, TRUE);			// Set big icon
    	SetIcon(m_hIcon, FALSE);		// Set small icon
    
    	// TODO: Add extra initialization here
    	SetTimer(ID_TIMER,100,NULL);
    
    	return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    void CMyDoublebufferDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialog::OnSysCommand(nID, lParam);
    	}
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CMyDoublebufferDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // device context for painting
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// Center icon in client rectangle
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDC* pDC = GetDC();
    		CDC memDC;
    		CBitmap memBm, *pOldBm;
    		CRect r;
    		CPen pen(PS_SOLID,1,COLORREF(0xffffff));
    		CPen* pOldPen;
    
    		GetClientRect(&r);
    		memBm.CreateCompatibleBitmap(pDC,r.Width(),r.Height());
    		memDC.CreateCompatibleDC(pDC);
    
    	//	memDC.BitBlt(0,0,r.Width(),r.Height(),pDC,0,0,SRCPAINT);
    
    		pOldBm = memDC.SelectObject(&memBm);
    		memDC.MoveTo(10,3);
    		pOldPen = memDC.SelectObject(&pen);
    		for(int i = 0;i<=counter;i++)
    		{
    			memDC.LineTo(10+counter,3+counter);
    		}
    
    		pDC->BitBlt(0,0,r.right,r.bottom,&memDC,0,0,SRCPAINT);
    		memDC.SelectObject(pOldBm);
    		memDC.SelectObject(pOldPen);
    		memDC.DeleteDC();	
    
    		CDialog::OnPaint();
    	}
    }
    
    // The system calls this function to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CMyDoublebufferDlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    
    void CMyDoublebufferDlg::OnTimer(UINT nIDEvent)
    {
    	// TODO: Add your message handler code here and/or call default
    	counter++;
    	Invalidate(false);
    	CDialog::OnTimer(nIDEvent);
    }
    
    BOOL CMyDoublebufferDlg::OnEraseBkgnd(CDC* pDC)
    {
    	// TODO: Add your message handler code here and/or call default
    
    	return CDialog::OnEraseBkgnd(pDC);
    }
    
    // stdafx.cpp : source file that includes just the standard includes
    // MyDoublebuffer.pch will be the pre-compiled header
    // stdafx.obj will contain the pre-compiled type information
    
    #include "stdafx.h"
    
    // MyDoublebuffer.h : main header file for the PROJECT_NAME application
    //
    
    #pragma once
    
    #ifndef __AFXWIN_H__
    	#error include 'stdafx.h' before including this file for PCH
    #endif
    
    #include "resource.h"		// main symbols
    
    // CMyDoublebufferApp:
    // See MyDoublebuffer.cpp for the implementation of this class
    //
    
    class CMyDoublebufferApp : public CWinApp
    {
    public:
    	CMyDoublebufferApp();
    
    // Overrides
    	public:
    	virtual BOOL InitInstance();
    
    // Implementation
    
    	DECLARE_MESSAGE_MAP()
    };
    
    extern CMyDoublebufferApp theApp;
    
    // MyDoublebufferDlg.h : header file
    //
    
    #pragma once
    
    // CMyDoublebufferDlg dialog
    class CMyDoublebufferDlg : public CDialog
    {
    // Construction
    public:
    	CMyDoublebufferDlg(CWnd* pParent = NULL);	// standard constructor
    	int counter;
    
    // Dialog Data
    	enum { IDD = IDD_MYDOUBLEBUFFER_DIALOG };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
    
    // Implementation
    protected:
    	HICON m_hIcon;
    
    	// Generated message map functions
    	virtual BOOL OnInitDialog();
    	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg void OnTimer(UINT nIDEvent);
    	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    };
    
    // stdafx.h : include file for standard system include files,
    // or project specific include files that are used frequently,
    // but are changed infrequently
    
    #pragma once
    
    #ifndef VC_EXTRALEAN
    #define VC_EXTRALEAN		// Exclude rarely-used stuff from Windows headers
    #endif
    
    // Modify the following defines if you have to target a platform prior to the ones specified below.
    // Refer to MSDN for the latest info on corresponding values for different platforms.
    #ifndef WINVER				// Allow use of features specific to Windows 95 and Windows NT 4 or later.
    #define WINVER 0x0400		// Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
    #endif
    
    #ifndef _WIN32_WINNT		// Allow use of features specific to Windows NT 4 or later.
    #define _WIN32_WINNT 0x0400		// Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
    #endif						
    
    #ifndef _WIN32_WINDOWS		// Allow use of features specific to Windows 98 or later.
    #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
    #endif
    
    #ifndef _WIN32_IE			// Allow use of features specific to IE 4.0 or later.
    #define _WIN32_IE 0x0400	// Change this to the appropriate value to target IE 5.0 or later.
    #endif
    
    #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS	// some CString constructors will be explicit
    
    // turns off MFC's hiding of some common and often safely ignored warning messages
    #define _AFX_ALL_WARNINGS
    
    #include <afxwin.h>         // MFC core and standard components
    #include <afxext.h>         // MFC extensions
    #include <afxdisp.h>        // MFC Automation classes
    
    #include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
    #ifndef _AFX_NO_AFXCMN_SUPPORT
    #include <afxcmn.h>			// MFC support for Windows Common Controls
    #endif // _AFX_NO_AFXCMN_SUPPORT
    
    //{{NO_DEPENDENCIES}}
    // Microsoft Visual C++ generated include file.
    // Used by MyDoublebuffer.rc
    //
    #define IDM_ABOUTBOX                    0x0010
    #define IDD_ABOUTBOX                    100
    #define IDS_ABOUTBOX                    101
    #define ID_TIMER                        101
    #define IDD_MYDOUBLEBUFFER_DIALOG       102
    #define IDR_MAINFRAME                   128
    
    // Next default values for new objects
    // 
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        129
    #define _APS_NEXT_COMMAND_VALUE         32771
    #define _APS_NEXT_CONTROL_VALUE         1000
    #define _APS_NEXT_SYMED_VALUE           102
    #endif
    #endif
    


  • @estartu_de: Ok, ich versuche es gleich bei dir hochzuladen, habe es erst gerade gelesen. 😉
    Danke.

    EDIT: So, habe ich nun losgeschickt.



  • Es ist auch schon da, aber mein blöder Server klemmt gerade. 😡

    [Edit]Adresse s.u.[/Edit]

    Morgen früh, sorry - ich glaube der Server zieht endlich um. 🙄



  • Kein Problem. 🕶
    Ich kann mich eh nicht oft genug wiederholen: DANKE! 😉



  • Der Server ist immer noch nicht erreichbar und beim Einrichten der anderen Domains muss wohl ein Fehler aufgetreten sein, was man per FTP macht wirkt sich nicht auf die Seite aus, die man per http bekommt. 😕

    Supportanfrage ist gestellt und sobald irgendeine Domain Lebenszeichen zeigt gebe ich hier auch den Link bekannt.

    Tut mir echt leid, so einen massiven Ausfall hatte ich ja noch nie. 😞
    Wer es haben möchte, ich schicks auch per Mail raus. 🙂



  • Kein Problem. Ich sitze da jetzt so lange dran, dass ich auch noch warten kann. 😉
    @ alle anderen: ihr habt's gehört, estartu_de schickt es auch per Mail raus. 🙂





  • Cool, danke! 👍
    http://rapidshare.de/files/2674749/MyDoublebuffer.zip.html

    Paul? Mail mir mal, dann bekommst du den Löschlink, damit du das runterwerfen kannst, wenn es erledigt ist. 🙂



  • Ok, schau in dein Postfach.

    @schlau: Danke auch dir! 😉
    Ihr seid super.

    MfG.
    Paul.



  • Wow, wer hat die Breakpoints da reingehauen. 😡 🤡

    Bei mir flackert nichts.



  • *UPS* Sorry. Hab ich vergessen.
    Wäre seltsam, wenn da nichts flackern würde?!?
    Achte mal darauf, wenn die Linie gezeichnet wird und du deinen Mauszeiger im Fenster lässt. Dann müsste der flackern.



  • Leider flackert bei mir nichts.

    Und wie siehtst bei estartu aus??

    Ich hab Win XP, SP 2. Vielleicht liegts auch im Grafickkartentreiber?!



  • Ich schau mal nach, was ich hier für ne Graka drin hab. Danke für die Info.



  • Ich habe es auch grade mal ausprobiert.

    Auf dem primären Monitor flackert die Maus nur schwach, man muss sie bewegen und dann genau hingucken. Nach 3-4 Sekunden ohne Bewegung hört das aber auf. 😕
    Auf dem sekundären Monitor flackert der Zeiger wie blöde, egal ob bewegt oder nicht. 😮

    Daten:
    Win2K Pro
    Matrox Millenium 550 Dual Head
    Primärer Monitor: Iiyama MM904UT 1200x1024 85Hz
    Sek.: Miro Ergoline (uralt und an Leistungsgrenze, flackert aber sonst nicht) 1152x864 85Hz

    Und jetzt? 😕



  • Dann könnte das auch daran liegen. Habe nämlich auch hier 2 Monitore angeschlossen. Die Graka die hier drinsteckt ist eine 08/15-Karte mit nur 16MB.
    ....

    Ok, habe es bei mir nun mal getestet. Bei dem einen flackert es und bei dem anderen nicht! 🙂 Wäre da nie drauf gekommen. Normalerweise nutze ich den einen, um zu programmieren und den anderen zu darstellen.
    Scheint also kein Software-Problem zu sein, oder?

    🙂



  • Zeichne den Hintergrund doch auch in OnPaint und sag bei OnEraseBkgnd das er nicht den Hintergrund zeichnen soll.



  • Ich vermute eher nicht.
    Ist der sekundäre der, der bei dir flackert?

    Es gibt zig Programme, die den primären Monitor verlangen, sonst geht es nicht.
    Viele Videos kann man nur auf dem gucken, der eine Codec ist so lustig, wenn man das Fenster so legt, dass es auf beiden ist, dann hat man halb Bild und halb nicht. 🤡

    Ich kann dir anbieten, es zu Hause nochmal zu testen. Da habe ich nch einen PC mit Ati-Karte und einen mit Matrox (beide Dual Head).

    Ich bin der Meinung das ist ein Softwareproblem - nur wessen ist die Frage.
    Deines?
    Treiber?
    Windows?

    Ich weiß es nicht. 🙄



  • Ok ,ich bezog mich nur auf meine Software.
    Das Flackern tritt auf dem sekundären Monitor auf. Ich probiere gleich mal die Reihenfolge zu ändern.
    Wäre nett, wenn du das zu Hause noch testen könntest, denn dort habe ich leider nur einen Monitor. 😞

    @kein Plan: was soll das bringen? es flackert ja die Maus und nicht der Hintergrund?



  • lad dir mal das runter: http://www.winprog.org/tutorial/files/source.zip

    und dort das programm anim_one ausführen und gucken ob es flackert.

    wenns flackert kann ich dir auch nicht weiter helfen, aber wenn es nicht flackert kannst du vielleicht die lösung im source code finden. 😉


Anmelden zum Antworten