Accueil > Forum > > > > [win32 - C/C++] Problème d'intialisation d'un calendrier
[win32 - C/C++] Problème d'intialisation d'un calendrier
mardi 4 novembre 2008 à 16:05:37 |
[win32 - C/C++] Problème d'intialisation d'un calendrier

uaip
|
Bonjour à tous. Après de nombreuses recherches sur le réseau Codes-Sources, la msdn, google, etc... je viens vous exposer directement mon problème ici. J'ai créé un contrôle calendrier (MONTHCAL_CLASS) et, mon but étant de pouvoir ajouter des événements, je lui ai rajouté le style MCS_DAYSTATE afin de pouvoir mettre certaines dates en gras. Le soucis est qu'à l'ouverture de ma fenêtre, certaines dates se mettent en gras toutes seules. Or, d'une part je voudrais qu'aucune ne soit mise en gras, pour ensuite en mettre certaines dès l'ouverture de la fenêtre. D'après la msdn, le seul moyen de mettre des dates en gras est d'intercepter le message WM_NOTIFY de la fonction callback, (avec le code MCN_GETDAYSTATE). J'ai donc récupéré un code (toujours sur la msdn) qui permette de mettre en gras des dates (visible ici ). Il fonctionne bien, mais pas à l'initialisation du contrôle (il faut cchanger de mois au moins 1fois pour que ça fonctionne). J'ai donc tenté de forcer l'envoi d'un message WM_NOTIFY juste après la création de mon contrôle... ça compile, mais le résultat n'y est pas. Voici une de mes nombreuses tentatives pour enlever toute date en gras à l'initialisation : // Dans mon WinMain();mois1 =CreateWindowEx (0,MONTHCAL_CLASS ,NULL ,WS_CHILD |WS_VISIBLE |MCS_DAYSTATE ,0,0,0,0,hwnd ,(HMENU )NULL ,hinst ,NULL );MONTHDAYSTATE rgMonths [12 ]={0 };NMDAYSTATE state ;state .nmhdr .code =MCN_GETDAYSTATE ;state .nmhdr .hwndFrom =mois1 ;// HWND de mon contrôlestate .stStart .wDay =1;// Jour de départ (d'après la doc msdn)state .stStart .wMonth =1;// Mois de départ (d'après la doc msdn)state .stStart .wYear =1601; // Année de départ (d'après la doc msdn)state .cDayState =12;// Nombre d'éléments dans le tableau affecté à 'prgDayState'for(int i =0 ;i < state .cDayState ;i ++) { BOLDDAY (rgMonths [i ],0); }// Initialise les dates à 0 (sans gras), j'ai aussi tenté sans cette boucle, ça ne change rienstate .prgDayState =rgMonths;// Structure 'MONTHDAYSTATE' contenant les états des datesSendMessage (hwnd ,WM_NOTIFY ,0,(LPARAM )&state );Ensuite j'intercepte le message WM_NOTIFY et, pour tester, je mets le 15ème jour de chaque mois en gras. //Dans ma MainWndProc();[...] case WM_NOTIFY : if((((LPNMHDR )lParam )->hwndFrom )== mois1 ) { if((((LPNMHDR )lParam )->code )== MCN_GETDAYSTATE ) { MONTHDAYSTATE rgMonths[12 ]={0}; int cMonths =((NMDAYSTATE *)lParam )->cDayState ; for(int i =0;i < cMonths ;i ++) { BOLDDAY (rgMonths [i],15 ); } ((NMDAYSTATE *)lParam )->prgDayState =rgMonths ; } }[...] En bref, si quelqu'un pourrait m'expliquer comment le code MCN_GETDAYSTATE fonctionne exactement car j'avoue ne pas avoir compris du tout. Par la même occasion, si on pouvait m'expliquer comment initialiser mon contrôle en virant toutes dates en gras, ça ne serait pas de refus ^^. (ce dont je suis sûr, c'est que mon SendMessage (mois1 ,WM_NOTIFY ,0,(LPARAM )&state ); appelle bien le message). Merci d'avance. Cordialement, uaip.
|
|
mardi 4 novembre 2008 à 22:06:57 |
Re : [win32 - C/C++] Problème d'intialisation d'un calendrier

racpp
|
Réponse acceptée !
Salut, <<D'après la msdn, le seul moyen de mettre des dates en gras est d'intercepter le message WM_NOTIFY de la fonction callback, (avec le code MCN_GETDAYSTATE).>> La MSDN a vraiment dit ça? Pour initialiser correctement le calendrier dès sa création, il suffit de faire: SYSTEMTIME st[2]; int nbrmois=SendMessage(mois1,MCM_GETMONTHRANGE , GMR_DAYSTATE, (LPARAM)st); SendMessage(mois1,MCM_SETDAYSTATE,nbrmois,(LPARAM)rgMonths); Le tableau rgMonths doit être péalablement initialisé comme dans la boucle de ton code.
|
|
mercredi 5 novembre 2008 à 11:49:43 |
Re : [win32 - C/C++] Problème d'intialisation d'un calendrier

uaip
|
Salut racpp. Ton code fonctionne en effet, c'est beau (vu le temps que j'ai galéré) mais j'avoue ne toujours pas comprendre comment fonctionne réellement ce contrôle. J'avais déjà tenté un MCM_SETDAYSTATE mais j'avoue ne pas avoir pensé au MCM_GETMONTHRANGE. En fait je tatillonne un peu. Je suis peut-être un peu bê-bête, mais je ne comprends pas ce que sont réellement les paramètres à envoyer / recevoir au contrôle. Si tu m'avais dit d'utiliser ces deux messages (cités plus haut) j'aurais sans doute réussi, mais sans savoir "pourquoi" utiliser ces deux messages.
Ne connais-tu pas un tuto ou quelque chose du genre qui explique clairement l'utilisation de ce contrôle ? Je trouve la msdn trop abstraite sur ce sujet. Et je n'ai pas réussi à trouver d'exemple sur le net qui corresponde à peu près à ce que je cherche à faire. Merci en tout cas pour ta réponse.
Cordialement, uaip.
|
|
mercredi 5 novembre 2008 à 12:42:24 |
Re : [win32 - C/C++] Problème d'intialisation d'un calendrier

uaip
|
Bon, même sans avoir tout compris, j'ai réussi à faire ce que je voulais : l'utilisateur rentre du texte dans un edit et l'enregistre. Cela écrit le texte dans un fichier + la date sélectionnée sur le calendrier. En navigant sur le calendrier, les dates en gras signifient que l'utilisateur a tapé du texte. Il suffit de cliquer dessus pour afficher le texte.
C'était simplement le fait de mettre les dates en gras que je n'arrivais pas. Là j'utilise seulement les 2 messages que tu m'as donné, j'ai ainsi pu virer le MCN_GETDAYSTATE du WM_NOTIFY. Ce n'est sans doute pas la meilleure solution, mais bon... disons qu' "au moins ça marche". Un grand merci, donc. :)
Cordialement, uaip.
|
|
mercredi 5 novembre 2008 à 18:57:52 |
Re : [win32 - C/C++] Problème d'intialisation d'un calendrier
|
mercredi 5 novembre 2008 à 19:35:11 |
Re : [win32 - C/C++] Problème d'intialisation d'un calendrier

uaip
|
"Par rapport à d'autres controles, je trouve que le calendrier est beaucoup plus simple à utiliser" En effet il n'est pas très dur dans l'absolu (disons que pratiquement tout est automatique) mais je pense qu'il me faudra pas mal de temps pour le manipuler "à l'aise". Cela dit, pour ma part, je trouve les autres contrôles plus simples, au contraire, du moins la ListView, TreeView, StatusBar, RichEdit, etc... Par contre il faudra que j'essaye la Rebar (là aussi, j'ai compris le principe, mais je trouve la manipulation assez laborieuse), le Pager et le SysLink. Peut-être que eux sont plus difficiles, comme tu le dis.
Sinon, pour en revenir au calendrier, j'ai posté cette après-midi, en espérant obtenior encore un peu plus d'aide sur ce qui ne va pas dans mon code. Bonne continuation.
Cordialement, uaip.
|
|
Cette discussion est classée dans : wm, state, dates, msdn, gras
Répondre à ce message
Sujets en rapport avec ce message
quitter WinHelp() [ par yerosnimus ]
Bonjour, Sur le site msdn : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/winhelp.asp
WM_MOUSEWHEEL et XP [ par Pistol_Pete ]
Salut à tous Je cherche à gérer la molette de la souris dans mon application win32. Le message WM_MOUSEWHEEL correspond parfaitement à ce que je veux.
eNVIYER DES MESSAGES DANS UNE FENËTRE HeDIT [ par piroman14 ]
Bonjour je souhaiterais envoyer des messages au moyen de la fonction SendMessage dans la fenêtre déjà existante hEdit.L'aide n'est pas très fournie. J
Conserver messages dans hEdit à chaque envoi de nveau message [ par piroman14 ]
Bonjour tout le monde:Dsl mais je suis toujours aussi mauvais en winAPI depuis la dernière fois.Mon problème est que je n'arrive pas à conserver les m
richedit bloquer la modification d'un document [ par babyboo1107 ]
Bonjour j'aimerais savoir comment faire pour lorsque je fais fermer le document il me met une fenetre gisée(ca j'ai trouver) mais ou il ne soit pas po
WM 6.1 pour HTC 3600 [ par nasnous03 ]
Salut tous le monde ; pourriez-vous mindiquer où je pourrais trouver le WM6.1 (Système d'exploitation) pour la mise à jour de mon HTC 3600 qui est à
Récupérer les événements sur une frame dans C++ via JNI [ par PleoX ]
Bonjour,(J'espère avoir mis mon sujet dans le bon thème. J'ai pas trouvé de thème plus aproprié.)Je suis en train de créer une application multi-touch
Probleme de socket [ par alphaone ]
// tcp_client.cpp*: définit le point d'entrée pour l'appli
Balloon tooltips dans le systray, mais pourquoi ça ne marche pas !? [ par Booster ]
Bonsoir à tous,J'aimerais faire un petit tooltips comme ceci : J'arrive à créer l'icône, mais impossible de faire apparaitre le moi
[ API WIN32 ] RECUPERER APPUI BOUTON FENETRE [ par lectpe ]
Bonjour, J'ai créé une boite de dialogue vide grâce aux ressources comme suit :IpToCountryDialog DIALOG 50, 30, 165, 80 STYLE WS_POPUP | WS
Livres en rapport
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|