begin process at 2012 05 30 09:19:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

SetDlgItemText dans un Theard


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SetDlgItemText dans un Theard

dimanche 1 août 2004 à 15:59:37 | SetDlgItemText dans un Theard

JCpp

J'ai réalisé un Theard :

HANDLE hConnect;
DWORD threadId;
DWORD WINAPI Mon_Theard (LPVOID param);
...

hConnect=CreateThread(NULL,0,Mon_Theard,NULL,0,&threadId);
...

DWORD WINAPI Mon_Theard (LPVOID param)
{
SetDlgItemText(hdlg,IDC_STATIC1,"Hello");
return 0;
}


Je ne comprend pas pourquoi, le Hello ne s'affiche pas.
Pourtant le Theard est bien exécuté.
Mon problème doit venir du hdlg qui ne ce trouve pas dans DWORD WINAPI Mon_Theard (LPVOID param). En rajoutant HWND hdlg, ça ne compile pas.

Que faire ?
Merci
dimanche 1 août 2004 à 16:11:57 | Re : SetDlgItemText dans un Theard

DeAtHCrAsH

hDlg représente le HANDLE de ta fenetre parent et doit etre déclaré en global.
Tu n'as pas a modifier le prototype de la fonction. Normal que ca compile pas.

Dans ton DlgProc, dans WM_CREATE ou WM_INITDIALOG, fait hDlg = hWnd.

Ensuite ca devrais marcher.

Shell
dimanche 1 août 2004 à 16:27:35 | Re : SetDlgItemText dans un Theard

JCpp

Je ne comprends pas vraiment ce que tu veux dire, voici tout le code :



#include <windows.h>
#include <stdio.h>
#include "resource.h"

HWND hdlg;
HANDLE hConnect;
DWORD threadId;
DWORD WINAPI Mon_Theard (LPVOID param);
// ''''''''
BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg)
{
case WM_INITDIALOG:
// hDlg = hWnd; <-- err.
hConnect=CreateThread(NULL,0,Mon_Theard ,NULL,0,&threadId);
return TRUE;
break;

case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDCANCEL:
{
EndDialog(hdlg, 0);
return TRUE;
break;
}
}
}
default:
break;
}
return FALSE;
}
// ''''''''
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_APP), NULL, AppDlgProc);
return 0;
}
// ''''''''
DWORD WINAPI Mon_Theard (LPVOID param)
{
SetDlgItemText(hdlg,IDC_STATIC1,"Hello");
return 0;
}
// ''''''''
dimanche 1 août 2004 à 16:30:00 | Re : SetDlgItemText dans un Theard

BruNews

Administrateur CodeS-SourceS
ben ou a ete initialise hdlg de:
SetDlgItemText(hdlg,IDC_STATIC1,"Hello");

ciao...
BruNews, Admin CS, MVP Visual C++
dimanche 1 août 2004 à 16:48:34 | Re : SetDlgItemText dans un Theard

JCpp

Justement, je n'arrive pas à l'initialiser le hdlg


DWORD WINAPI Mon_Theard (LPVOID param)
{
HWND hdlg;
SetDlgItemText(hdlg,IDC_STATIC1,"Hello");
return 0;
}

Il y a une erreur de compilation


DWORD WINAPI Mon_Theard (HWND hdlg,LPVOID param)
{
SetDlgItemText(hdlg,IDC_STATIC1,"Hello");
return
}

Il y a une erreur de compilation aussi

J'ai essayé plain de chose, je ne comprends pas DeAtHCrAsH avec :
hDlg représente le HANDLE de ta fenêtre parent et doit être déclaré en global

Que dois je faire pour que ça fonctionne merci
dimanche 1 août 2004 à 16:57:14 | Re : SetDlgItemText dans un Theard

BruNews

Administrateur CodeS-SourceS
Mais regarde bien ce que tu fais.
hdlg est variable globale de meme nom que le HWND de ta dlgproc alors tu ne peux pas ecrire hdlg = hdlg;

change nom de la globale en hmain:
case WM_INITDIALOG:
hmain = hdlg;
.......

DWORD WINAPI Mon_Theard (HWND hdlg,LPVOID param)
{
SetDlgItemText(hmain,IDC_STATIC1,"Hello");
return 0;
}


ciao...
BruNews, Admin CS, MVP Visual C++
dimanche 1 août 2004 à 16:58:39 | Re : SetDlgItemText dans un Theard

BruNews

Administrateur CodeS-SourceS
ahhh merde, et je fais un copier coller d'une connerie en +:

DWORD WINAPI Mon_Theard (LPVOID param)
{
SetDlgItemText(hmain,IDC_STATIC1,"Hello");
return 0;
}


ciao...
BruNews, Admin CS, MVP Visual C++
dimanche 1 août 2004 à 17:11:22 | Re : SetDlgItemText dans un Theard

JCpp

Je comprend pas tôt c'est fonction : HWND, HANDLE, DWORD, WPARAM, LPARAM

Il faudrait que je me documente un peut plus, ça peut être utile.
Merci BruNews, ça fonctionne
dimanche 1 août 2004 à 21:49:43 | Re : SetDlgItemText dans un Theard

DeAtHCrAsH

Tu m'as l'air un peu emmélé dans tout ces termes, alors je vais prendre 10 minute pour t'expliquer tout ca!

Avant tous faut savoir leur definitions et ce qu'il représente.

Quand tu crée une boite de dialog, un identifiant UNIQUE lui est donné afin quel puisse interagir avec tous les composants quel comporte, et autres.
Cet identifiant s'appelle le handle est pour une boite de dialog il correspond a HWND.
HWND est un type comme char, int, double,...

Maintenant quand tu crées un dialog, tu te sert d'une fonction de CallBack qui va te permettre d'intercepter tout les messages envoyés et recus par le programme et ces composants.
Cette fonction de CallBack est générallement appellé "DlgProc", qui signifie "Dialog Processus".

Ensuite ce qu'il ne faut pas oublié, que toute les varaibles déclaré dans une fonction, ont une porté local. Cela signifie qu'elle sont valable uniquement dans la fonctions qui les a créer!

Ainsi quand on parle de variable GLOBALE, cela indique que ces variables sont déclarées en tete de page et que toute les fonctions du programme peuvent s'en servir.

Tu comprends donc qu'il existe 2 genres de variables : les GLOBALES et les LOCALES.

Pour en revenir a ton probleme, dans ta fonction de CallBack DialogProc, tu récois la valeurs de ton HWND en parametres.
Ainsi pour que toutes tes fonctions puissent utiliser ce HWND, tu es obligé de passer sa valeur à une variable de meme type qui sera GLOBALE! Car le HWND que tu recois a une porté locale du fait que sa declaration se trouve dans la fonction.

Pour ce qui est de WPARAM et de LPARAM, ce sont des parametres qui te permettent d'identifier les messages recues dans ta fonction de CallBack DlgProc.

Pour plus de renseignement sur ces variables, voir la MSDN. Mais ce n'est pas des plus necessaires.
POur faire simple dis toi que LPARAM et WPARAM sont de simple parametres de la fonctions DlgProc.

Sinon si tu es sous VC++, mets ta souris sur le mot DWORD par exemple et fait un clique droit puis va sur "Go to the definition of ..."
Ca te dira a quoi correspond exactement ce type.

WPARAM, LPARAM et DWORD sont simplement es macros, c'est a dire des type de variables qui résulte de l'association de plusieurs type. Tu peux toi meme en créer.

Je pense avoir tout expliqué sans faire d'erreur. Pour finir voici le code que tu as posté après avec quelques correction pour qu'il puisse marcher.


#include <windows.h>
#include <stdio.h>
#include "resource.h"

HWND hDlg; //Ca c'est le HANDLE declarés en GLOBAL
HANDLE hConnect;
DWORD threadId;
DWORD WINAPI Mon_Theard (LPVOID param);
// ''''''''
BOOL CALLBACK AppDlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_INITDIALOG:
// hDlg = hWnd; // Ici on transfere la valeur de hWnd dans hDlg pour que les autres fonctions puisse y avoir accès
hConnect=CreateThread(NULL,0,Mon_Theard ,NULL,0,&threadId);
return TRUE;
break;

case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDCANCEL:
{
EndDialog(hWnd, 0);
return TRUE;
break;
}
}
}
default:
break;
}
return FALSE;
}
// ''''''''
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
DialogBox(hInstance, MAKEINTRESOURCE(IDD_APP), NULL, AppDlgProc);
return 0;
}
// ''''''''
DWORD WINAPI Mon_Theard (LPVOID param)
{
SetDlgItemText(hDlg,IDC_STATIC1,"Hello");
return 0;
}
// ''''''''


Voila si certains voyent des erreurs qu'ils me le disent.
J'espere t'avoir un peu plus eclairci sur le sujet tout en esperant que tu y retiennes au mieux que possible.

A++ et bonne continuation...

Shell

P.S : il ne faut jamais changer les parametres des fonctions deja défini dans le langage C/C++ sinon ca ne fonctionne pas et le compilateur te generes des erreurs. Je dis ca pour la creation du thread ou tu a essayé de mettre le HWND en parametre.


Cette discussion est classée dans : dword, setdlgitemtext, lpvoid, winapi, theard


Répondre à ce message

Sujets en rapport avec ce message

ScannerIP() [ par JCpp ] Il y a-t-il un moyen d'ouvrir 100 Theard sans écrire :DWORD WINAPI ScaneIP1(LPVOID param){..}DWORD WINAPI ScaneIP2(LPVOID param){..}. Problème de compilation d'une Dll [ par DrUn ] Bonjour, J'ai une Dll qui a été compilée par visual c++ il y a quelques temps. Cette Dll fait du WinHTTP. Elle n'a pas été modifiée et mon SDK non plu Prob de thread [ par sebastienbro ] Bonjour, j'ai un problème avec des thread, je n'arrive pas a en créer un :(Voici mon code : HANDLE hThread1;DWORD dwThreadId1;DWORD WINAPI T RegOpenKeyEx [ par guitoulefoux ] Bonjour,Pourriez vous m'aider a corriger mon erreur.Voici mon bout de code :TCHAR MenDema[1024];[...]HKEY hKey;RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWA transformer un jour du mois en DWORD [ par myocean ] Dans le cas de la structure AT_INFOla variable DaysOfMonth est au format DWORD et elle recoit comme paramêtre des bit où le bit 0 est le 1er du mois Comment écrire plusieurs ligne dans un SetDlgItemText [ par guillotonl ] Bonjour,Je suis Newbies et je voudrais écrire plusieurs ligne dans un bloc texte. j'utilise la fonction SetDlgItemText mais a prioris, les retours cha GetFileVersionInfoSize, probleme de link [ par gege1024 ] en utilisant : GetFileVersionInfoSizej'ai un probleme de lien, et je ne sais pas d'ou ca vient (# include ???) DWORD info; DWORD toto; info = probleme setdlgitemtext [ par sleeper41 ] Bonjour à tous.Voila en fait je ne comprends certaines choses.Donc je me suis inspiré d un exemple sur ce forum pour ecrre du texte dns notepad.Je fai port série thread [:)] [ par cheMoor ] <img src=/imgs2/smile.gif border=0 align="a compatibilité borland microsoft visual [ par swnnos ] Bonjour je dois réutiliser un fichier d'en tête fourni par le constructeur d'une platine d'usinage. Seulement ce fichier est compatible borland mais p


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales