Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec OPENFILENAME Struct

3 réponses
Avatar
Polo497
Bonjour,

je fait actuellement un programme similaire a notepad.Mais je
rencontre un probl=E8me d'affichage.Lorsque j'=E9cris dans fen=EAtre le
texte ne s'affiche pas correctement, je doit redimensionner la fen=EAtre
pour que cela fonctionne.Idem lorsque j'appuie sur Entr=E9e pour all=E9 a
la ligne, le texte reste sur la 1ere ligne et je doit de nouveau
redimensionner la fen=EAtre.

Il semble que le probl=E8me 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=F9 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 =3D hNotePad;

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

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

notePadWnd =3D 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 =3D 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] =3D {0};
CHAR szFileName[256] =3D {0};

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

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

hf =3D CreateFile(szFile, GENERIC_READ, 0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
FileSize =3D GetFileSize(hf, NULL);
buffer =3D (PCHAR)LocalAlloc(LMEM_FIXED,
FileSize + 1);
ReadFile(hf, buffer, FileSize,
&nbcharRead, NULL);
buffer[FileSize] =3D 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.

3 réponses

Avatar
Alain
"Polo497" a écrit dans le message de news:

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...
Avatar
Polo497
On 15 nov, 12:02, "Alain" wrote:
"Polo497" a écrit dans le message de new s:


>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+++
Avatar
Alain
"Polo497" a écrit dans le message de news:


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...