Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1222 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Affichage dialog dans un thread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Affichage dialog dans un thread

n°1757066
cyte
Posté le 08-07-2008 à 19:32:52  profilanswer
 

Pour une application, j'ai crée un projet MFC dialog dans lequel j'inhibe l'affichage de la boite de dialogue par defaut (IDD_nomduprojet_DIALOG)
 
Je créer un dialogue auquel j'associe une classe.
 
 
Dans mon appli, je crée un thread dans lequel j'affiche mon dialogue (Create() avec comme propriété du dialgoe Visible à true)
 
Mon problème est que lorsque je lance l'appli, mon dialogue s'ouvre mais le curseur de souris reste occupé (sablier) dès qu'il est dans l'espace de la boîte de dialogue!!!!! Du coup, je ne peux faire aucun appui bouton.
 
Que puis-je faire????
 
Merci d'avance

mood
Publicité
Posté le 08-07-2008 à 19:32:52  profilanswer
 

n°1757631
cyte
Posté le 10-07-2008 à 01:50:23  profilanswer
 

Personne n'a une idée???????

n°1757726
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-07-2008 à 10:44:32  profilanswer
 

difficile d'avoir une idée sans :
- le code du traitement de l'appli
- savoir ce qu'est censée faire ton appli


---------------
J'ai un string dans l'array (Paris Hilton)
n°1758070
cyte
Posté le 10-07-2008 à 18:07:33  profilanswer
 

Mon appli lance un certain nombre de threads.
Parmis ces threads, il y en a un qui, à partir d'une classe derivant de CDialog, affiche une boîte de dialogue :
 
DWORD ProcIHM(LPVOID lpParametre)
{
 if (lpParametre == NULL)
 {
  return PARAMETRE_NULL;
 }
 
 /*** DEBUT INITIALISATION ***/
 // Copy local au thread de l'objet de communication
 CCommunication com;
 memcpy(&com,lpParametre,sizeof(CCommunication));
 
 // Creation de l'IHM principale //
 CMainIhm* p_ihm = new CMainIhm();
 p_ihm->StartIhm();

....
 
 
[i]MainIhm.h :[/i]
#pragma once
#include "afxwin.h"
#include "resource.h"
 
// CMainIhm dialog
 
class CMainIhm : public CDialog
{
 DECLARE_DYNAMIC(CMainIhm)
 
public:
 CMainIhm(CWnd* pParent = NULL);   // standard constructor
 virtual ~CMainIhm();
 
 void StartIhm(void);
 
 HBITMAP m_TabCarte[13][4];
 
// Dialog Data
 enum { IDD = IDD_MAINIHM };
 
protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 
 DECLARE_MESSAGE_MAP()
public:
 
 CStatic m_PictCtrlTapis;
};
 
MainIhm.cpp :
// MainIhm.cpp : implementation file
//
 
#include "stdafx.h"
#include "MainIhm.h"
 
 
// CMainIhm dialog
 
IMPLEMENT_DYNAMIC(CMainIhm, CDialog)
 
CMainIhm::CMainIhm(CWnd* pParent /*=NULL*/)
 : CDialog(CMainIhm::IDD, pParent)
{
 
}
 
CMainIhm::~CMainIhm()
{
}
 
void CMainIhm::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 
 DDX_Control(pDX, IDC_PICTURE, m_PictCtrlTapis);
}
 
void CMainIhm::StartIhm(void)
{
 this->Create(IDD_MAINIHM);
 this->SetForegroundWindow();
 this->SetActiveWindow();
 CString path = _T("" );
 DWORD result = 0;
 
 for (int i = 0; i < 12; i++)
 {
  for ( int j = 0 ; j < 4; j++)
  {
   path = _T("" );
   path.AppendFormat(_T("E:\\Cissou\\Projets\\RFID Gaming\\Visual2008_projects\\Prototype_V0\\IHM\\Images\\cartes\\" ));
   path.AppendFormat(_T("%d" ), i+2);  
   path.AppendFormat(_T("_" ));
   path.AppendFormat(_T("%d" ), j+1);
   path.AppendFormat(_T(".bmp" ));
   m_TabCarte[i][j] = (HBITMAP) LoadImage(NULL, path.GetString(), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
   if ( m_TabCarte[i][j] == NULL)
   {
    result = GetLastError();
   }
   else
   {
    CWnd * hWndViewerCarte = this->GetDlgItem(IDC_PICTURE);
    m_PictCtrlTapis.SetWindowPos(NULL, 0, 0, /*CardBmp.GetBitmapDimension().cx*/45, /*CardBmp.GetBitmapDimension().cy*/63, SWP_SHOWWINDOW);
     
    // Associate picture to the control  
    hWndViewerCarte->SendMessage( STM_SETIMAGE,  
    (WPARAM) IMAGE_BITMAP,  
    (LPARAM) m_TabCarte[i][j] );
    Sleep(500);
   }
   #ifdef _DEBUG
   TRACE("Resultat crtCheckMemory apres remplissage m_TabCarte[%d][%d] : %d\n", i, j, _CrtCheckMemory());
   #endif
  }
 }
 #ifdef _DEBUG
  TRACE("Resultat crtCheckMemory avant sorie du constructeur de CMainIhm : %d\n", _CrtCheckMemory());
 #endif
}
 
BEGIN_MESSAGE_MAP(CMainIhm, CDialog)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()
 
 
// CMainIhm message handlers
 
 
 
 
 
Voilà, si quelqu'un a une idée....
 
petite précision : l'appel de la fonction StartIhm() dans le thread principal donne le même résultat.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Affichage dialog dans un thread

 

Sujets relatifs
AutoIt3 - affichage fenêtre et sortie d'erreurAffichage d'une image Bitmap dans un contrôle
Problème affichage sous IE 6Probleme affichage + Boucle while
Problème avec les pointeurs (thread)Menu déroulant en JVS: problème d'affichage
affichage d'image et ouverture de fichiers sous Firefoxperte d'evenements inter thread C++
Problème d'affichage de la page PHPProblème d'affichage avec Internet Exlorer 6.0 entre autre
Plus de sujets relatifs à : Affichage dialog dans un thread


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR