?
Solved

Wait cursor problem !

Posted on 1998-07-13
5
Medium Priority
?
512 Views
Last Modified: 2013-11-20
I have written a sample appliction dialog box which
has 2 buttons (Start and Stop wait cursor). The first
button display the wait cursor and the second stop it.
I have tested it with 'DoWaitCursor' and with 'CCmdTarget'.

// First method
void CMyDialogBox::OnStart()
 {
  ((CMyApp *)AfxGetApp())->DoWaitCursor(1);
 }

void CMyDialogBox::OnStop()
 {
  ((CMyApp *)AfxGetApp())->DoWaitCursor(-1);
 }

// Second method
CCmdTarget g_CmdTarget;

void CMyDialogBox::OnStart()
 {
  g_CmdTarget.BeginWaitCursor();
 }

void CMyDialogBox::OnStop()
 {
  g_CmdTarget.EndWaitCursor();
 }

It doesn't work when application is a dialog box ! Why ?
But it works when the sample is an SDI or MDI application.

Can someone help me !
Thanks,
Mike.
0
Comment
Question by:mike_marquet
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 3

Accepted Solution

by:
Norbert earned 10 total points
ID: 1319066
Normaly a Dialog is deived from CCmdTarget.
Therefore you don't need a g(oblal?)_CmdTarget.
simple call BeginWaitCursor/EndWaitCursor. I have an Dlg app that use that and it works.
0
 

Author Comment

by:mike_marquet
ID: 1319067
I have do this but it doesn't work. Here is the sample application I have written for the test. Can you look where's
the mistake !

// *************************************************************
// *************************************************************
// WaitCursorTester.h : main header file for the WAITCURSORTESTER application
//

#if !defined(AFX_WAITCURSORTESTER_H__B93D9CC4_1A59_11D2_92DA_99548D96D21C__INCLUDED_)
#define AFX_WAITCURSORTESTER_H__B93D9CC4_1A59_11D2_92DA_99548D96D21C__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"            // main symbols

/////////////////////////////////////////////////////////////////////////////
// CWaitCursorTesterApp:
// See WaitCursorTester.cpp for the implementation of this class
//

class CWaitCursorTesterApp : public CWinApp
 {
  public :
           CWaitCursorTesterApp();

  public :
      //{{AFX_VIRTUAL(CWaitCursorTesterApp)
      virtual BOOL InitInstance();
      //}}AFX_VIRTUAL

      //{{AFX_MSG(CWaitCursorTesterApp)
      //}}AFX_MSG
      DECLARE_MESSAGE_MAP()
    afx_msg void OnUserMessage(UINT, LONG);
 };

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_WAITCURSORTESTER_H__B93D9CC4_1A59_11D2_92DA_99548D96D21C__INCLUDED_)

// *************************************************************
// *************************************************************

// WaitCursorTester.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "WaitCursorTester.h"
#include "WaitCursorTesterDlg.h"
#include "Defines.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CWaitCursorTesterApp

BEGIN_MESSAGE_MAP(CWaitCursorTesterApp, CWinApp)
      //{{AFX_MSG_MAP(CWaitCursorTesterApp)
      //}}AFX_MSG
      ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    ON_THREAD_MESSAGE(WM_USER, OnWaitCursor)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWaitCursorTesterApp construction

CWaitCursorTesterApp::CWaitCursorTesterApp()
 {
 }

/////////////////////////////////////////////////////////////////////////////
// The one and only CWaitCursorTesterApp object

CWaitCursorTesterApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CWaitCursorTesterApp initialization

BOOL CWaitCursorTesterApp::InitInstance()
 {
  #ifdef _AFXDLL
  Enable3dControls();                  // Call this when using MFC in a shared DLL
  #else
  Enable3dControlsStatic();      // Call this when linking to MFC statically
  #endif

  CWaitCursorTesterDlg dlg;
  m_pMainWnd = &dlg;
  dlg.DoModal();

  return FALSE;
 }

// ---------------------------------------------------------------------------

void CWaitCursorTesterApp::OnUserMessage(UINT State, LONG)
 {
  if (State) BeginWaitCursor();
  else EndWaitCursor();
 }

// *************************************************************
// *************************************************************

// WaitCursorTesterDlg.h : header file
//

#if !defined(AFX_WAITCURSORTESTERDLG_H__B93D9CC6_1A59_11D2_92DA_99548D96D21C__INCLUDED_)
#define AFX_WAITCURSORTESTERDLG_H__B93D9CC6_1A59_11D2_92DA_99548D96D21C__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

/////////////////////////////////////////////////////////////////////////////
// CWaitCursorTesterDlg dialog

class CWaitCursorTesterDlg : public CDialog
 {
  public :
           CWaitCursorTesterDlg(CWnd* pParent = NULL);

  protected :
              HICON m_hIcon;

  public :
      //{{AFX_DATA(CWaitCursorTesterDlg)
      enum { IDD = IDD_WAITCURSORTESTER_DIALOG };
      //}}AFX_DATA

  protected :
      //{{AFX_VIRTUAL(CWaitCursorTesterDlg)
      protected:
      virtual void DoDataExchange(CDataExchange* pDX);      // DDX/DDV support
      //}}AFX_VIRTUAL

      //{{AFX_MSG(CWaitCursorTesterDlg)
      virtual BOOL OnInitDialog();
      afx_msg void OnPaint();
      afx_msg HCURSOR OnQueryDragIcon();
      afx_msg void OnPB_Start();
      afx_msg void OnPB_Stop();
      //}}AFX_MSG
      DECLARE_MESSAGE_MAP()
 };

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_WAITCURSORTESTERDLG_H__B93D9CC6_1A59_11D2_92DA_99548D96D21C__INCLUDED_)

// *************************************************************
// *************************************************************

// WaitCursorTesterDlg.cpp : implementation file
//

#include "stdafx.h"
#include "WaitCursorTester.h"
#include "WaitCursorTesterDlg.h"
#include "Defines.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CWaitCursorTesterDlg dialog

CWaitCursorTesterDlg::CWaitCursorTesterDlg(CWnd* pParent) : CDialog(CWaitCursorTesterDlg::IDD, pParent)
 {
      //{{AFX_DATA_INIT(CWaitCursorTesterDlg)
      //}}AFX_DATA_INIT
  m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 }

// ---------------------------------------------------------------------------

void CWaitCursorTesterDlg::DoDataExchange(CDataExchange* pDX)
 {
  CDialog::DoDataExchange(pDX);
      //{{AFX_DATA_MAP(CWaitCursorTesterDlg)
      //}}AFX_DATA_MAP
 }

// ---------------------------------------------------------------------------

BEGIN_MESSAGE_MAP(CWaitCursorTesterDlg, CDialog)
      //{{AFX_MSG_MAP(CWaitCursorTesterDlg)
      ON_WM_PAINT()
      ON_WM_QUERYDRAGICON()
      ON_BN_CLICKED(IDPB_START, OnPB_Start)
      ON_BN_CLICKED(IDPB_STOP, OnPB_Stop)
      //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CWaitCursorTesterDlg message handlers

BOOL CWaitCursorTesterDlg::OnInitDialog()
 {
  CDialog::OnInitDialog();

  SetIcon(m_hIcon, TRUE);                  // Set big icon
  SetIcon(m_hIcon, FALSE);            // Set small icon
      
  return TRUE;
 }

// ---------------------------------------------------------------------------

void CWaitCursorTesterDlg::OnPaint()
 {
  if (IsIconic())
   {
      CPaintDC dc(this); // device context for painting

      SendMessage(WM_ICONERASEBKGND, (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 CDialog::OnPaint();
 }

// ---------------------------------------------------------------------------

HCURSOR CWaitCursorTesterDlg::OnQueryDragIcon()
 {
  return (HCURSOR) m_hIcon;
 }

// ---------------------------------------------------------------------------

void CWaitCursorTesterDlg::OnPB_Start()
 {
  //((CWaitCursorTesterApp *)AfxGetApp())->PostThreadMessage(WM_USER,1L,0L);
  BeginWaitCursor();
 }

// ---------------------------------------------------------------------------

void CWaitCursorTesterDlg::OnPB_Stop()
 {
  //((CWaitCursorTesterApp *)AfxGetApp())->PostThreadMessage(WM_USER,0L,0L);
  EndWaitCursor();
 }

// *************************************************************
// *************************************************************

0
 
LVL 3

Expert Comment

by:Norbert
ID: 1319068
One thing I can See:
you are using WM_USER! The MFC uses some WM_USER Messages therfore never use WM_USER it is better to use
WM_USER+10

BTW You have Accepted the answer normaly it is better to reject an Answer if it does not fullfill your requirements so other experts can answer also now this question is inside the answered question section an most experts will not look there to answer someting
0
 

Author Comment

by:mike_marquet
ID: 1319069
Thanks
0
 
LVL 3

Expert Comment

by:Norbert
ID: 1319070
does it work now ?
0

Featured Post

Will your db performance match your db growth?

In Percona’s white paper “Performance at Scale: Keeping Your Database on Its Toes,” we take a high-level approach to what you need to think about when planning for database scalability.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: The undo support, implementing a stack. Continuing from the eigth article about sudoku.   We need a mechanism to keep track of the digits entered so as to implement an undo mechanism.  This should be a ‘Last In First Out’ collec…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question