Problème avec OPENFILENAME Struct

Le
Polo497
Bonjour,

je fait actuellement un programme similaire a notepad.Mais je
rencontre un problème d'affichage.Lorsque j'écris dans fenêtre le
texte ne s'affiche pas correctement, je doit redimensionner la fenêtre
pour que cela fonctionne.Idem lorsque j'appuie sur Entrée pour allé a
la ligne, le texte reste sur la 1ere ligne et je doit de nouveau
redimensionner la fenêtre.

Il semble que le problème vienne de toute la partie pour la boite de
dialogue d'ouverture de fichier.Car lorsque je met cette partie en
commentaire , le programme fonctionne.Le truc c'est que je ne comprend
pas où est l'erreur.

Voila le code complet :
#include <windows.h>
#include <commdlg.h>
#include <stdio.h>

#include "proto_WinMain.h"
#include "constantes.h"

HINSTANCE hInstance;

int WINAPI WinMain(HINSTANCE hNotePad, HINSTANCE precInstance, LPSTR
lgnCmd, int modeAffichage)
{
HWND notePadWnd;
MSG message;
WNDCLASS wc;

hInstance = hNotePad;

wc.style = 0;
wc.lpfnWndProc = NotePadProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = "LESMENUS";
wc.lpszClassName = "MyNotePad";

if(!RegisterClass(&wc))
return 1;

notePadWnd = CreateWindow("MyNotePad", "", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT, 600, 400,
NULL, NULL ,
hInstance, NULL);
if(!notePadWnd)
return 1;

ShowWindow(notePadWnd, modeAffichage);

while(GetMessage(&message, NULL, 0, 0))
{
TranslateMessage(&message);
DispatchMessage(&message);
}

return message.wParam;
}

LRESULT CALLBACK NotePadProc(HWND notePadWnd, UINT uMsg, WPARAM
wParam, LPARAM lParam)
{
static HWND hEdit;

switch(uMsg)
{
case WM_CREATE :
{
hEdit = CreateWindow("EDIT", "Texte",
WS_CHILD | WS_VISIBLE | WS_VSCROLL |
ES_MULTILINE | ES_WANTRETURN, 0,
0, 0, 0,
notePadWnd, NULL, hInstance,
NULL);
return 0;
}

case WM_COMMAND :
switch(LOWORD(wParam))
{
case IDM_OPEN :
{
OPENFILENAME ofn;
CHAR szFile[MAX_PATH] = {0};
CHAR szFileName[256] = {0};

ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = notePadWnd;
ofn.lpstrFilter = "Texte File*.txt";
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = szFileName;
ofn.nMaxFileTitle = 256;
ofn.lpstrInitialDir = "C:\";
ofn.lpstrTitle = "Ouvrir";
ofn.Flags =
OFN_FILEMUSTEXIST | /
*OFN_FORCESHOWHIDDEN | */
OFN_HIDEREADONLY |
OFN_PATHMUSTEXIST;

if(GetOpenFileName(&ofn) == TRUE)
{
HANDLE hf;
DWORD FileSize, nbcharRead;
CHAR *buffer;

hf = CreateFile(szFile, GENERIC_READ, 0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
FileSize = GetFileSize(hf, NULL);
buffer = (PCHAR)LocalAlloc(LMEM_FIXED,
FileSize + 1);
ReadFile(hf, buffer, FileSize,
&nbcharRead, NULL);
buffer[FileSize] = 0;
SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)
buffer);
LocalFree(buffer);
CloseHandle(hf);
}
}
return 0;

case IDM_QUIT :
PostMessage(notePadWnd, WM_CLOSE, 0, 0);
return 0;
}
case WM_SIZE :
MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam),
TRUE);
return 0;

case WM_DESTROY :
PostQuitMessage(0);
return 0;

default :
return DefWindowProc(notePadWnd, uMsg, wParam, lParam);
}
}

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain
Le #20558801
"Polo497"
Bonjour,
je fait actuellement un programme similaire a notepad.Mais je
rencontre un problème d'affichage.Lorsque j'écris dans fenêtre le
texte ne s'affiche pas correctement, je doit redimensionner la fenêtre
pour que cela fonctionne.Idem lorsque j'appuie sur Entrée pour allé a
la ligne, le texte reste sur la 1ere ligne et je doit de nouveau
redimensionner la fenêtre.



Avec Visual Studio (2003), j'ai copié le code dans un nouveau projet,
rajouté un menu et... tout fonctionne normalement...
Polo497
Le #20559481
On 15 nov, 12:02, "Alain"
"Polo497"

>Bonjour,
>je fait actuellement un programme similaire a notepad.Mais je
>rencontre un problème d'affichage.Lorsque j'écris dans fenêtre le
>texte ne s'affiche pas correctement, je doit redimensionner la fenêtre
>pour que cela fonctionne.Idem lorsque j'appuie sur Entrée pour allé a
>la ligne, le texte reste sur la 1ere ligne et je doit de nouveau
>redimensionner la fenêtre.

Avec Visual Studio (2003), j'ai copié le code dans un nouveau projet,
rajouté un menu et... tout fonctionne normalement...



Re,
J'ai trouvé, c'est vraiment l'erreur bête mais qui rend un peu fou.Il
manquait en fait le return 0 de la case WM_COMMAND

/* .................. */
case IDM_QUIT :
PostMessage(notePadWnd, WM_CLOSE, 0, 0);
return 0;
}
return 0; <----- ICI !
case WM_SIZE :
MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam),
TRUE);
return 0;
/* ................../*

Bonjour Alain, c'est bizard que sans ce return tout fonctionne
correctement.J'ai testé et lorsque tu écris une ligne -> appuies sur
Entrée et écris une second ligne.Tu doit redimensionner la fenêtre
pour voir tout ce que tu vient d'écrire.Alors qu'avec le return, il
n'y a plus de problème.

Dans tout les cas problème résolu.

A+++
Alain
Le #20559661
"Polo497"

J'ai trouvé, c'est vraiment l'erreur bête mais qui rend un peu fou.Il
manquait en fait le return 0 de la case WM_COMMAND



Oui, en fait j'avais rajouté "break;" machinalement après chaque "case" : ce
qui revient au même...
Publicité
Poster une réponse
Anonyme