duci.ro FORUM at forumco.com
duci.ro FORUM at forumco.com
Home | Profile | Register | Active Topics | Active Polls | Members | Private Messages | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?




 All Forums
 ProgrammingPool environment
 Functiile WinAPI32
 Dialogul si Dialogurile comune in WinApi32
 Forum Locked
 Send Topic to a Friend
 Printer Friendly
Author Previous Topic Topic   

duci
Forum Admin


210 Posts

Posted - 07/18/2005 :  16:37:21  Show Profile  Email Poster Send duci a Private Message
Dialoguri


Dialogurile sunt initiate de obicei prin fisierul de resurse (rsrc.rc). Modalitatea depinde de mediul integrat de dezvoltare folosit.

Exemplu pentru fereastra din imaginea de mai jos.:


10000 DIALOG 10,10,160,210//18, 30, 136, 142
STYLE WS_OVERLAPPEDWINDOW |DS_MODALFRAME
CAPTION "Fereastra de iesire - fara grafica "
FONT 10,"MS Sans Serif"
BEGIN
LTEXT "Functia de repartitie a distributiei Student", 1, 0, 0, 165, 8
GROUPBOX "Rezultate", 5002, 1,58,155,132
LISTBOX 100, 7,68, 142, 124, LBS_HASSTRINGS | WS_VSCROLL|WS_CAPTION
GROUPBOX "Datele de intrare", 5003, 1,10,155,47
LTEXT "&1: x:", 10, 11, 20, 44, 8
EDITTEXT IDD_STRING1, 42, 18, 104, 12
LTEXT "&2: v:", 10, 11, 32, 44, 8
EDITTEXT IDD_STRING2, 42, 30, 104, 12
DEFPUSHBUTTON "Calculeaza", IDOK,10,194, 135, 15
END


Programul principal:

int WINAPI WinMain( HINSTANCE hInst,
HINSTANCE hPrev, LPSTR lpCmd, int nShow )
{
DialogBox( hInst,MAKEINTRESOURCE(10000),NULL,MainDlgProc);
return( FALSE );
}


Folosirea unei ferestre de tip dialog este foarte utila pentru scurtarea ciclului de creare a unei ferestre sau pentru deschiderea dialogului dintr-un meniu.

Fiecare dialog trebuie să aiba o procedura CALLBACK proprie.

Pentru ferestre dialog nu avem nevoie de procesarea DefWindowProc, actiunile de procesare a mesajelor fiind făcute automat de sistemul de operare.

In loc de WM_CREATE folosim WM_INITDIALOG. Acest mesaj este foarte util pentru deschiderea dialogului dintr-un meniu sau la apasarea unui buton.

In locul mesajului DestroyWindow vom folosi EndDialog.


BOOL WINAPI MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_INITDIALOG: // Initiere dialog
{
SetProp( hDlg, MAKEINTATOM( 10000 ),
// Dialog box
sprintf(szString1,"%lf",x);
SetDlgItemText(hDlg,IDD_STRING1,szString1);//scrie în fereastra
SendDlgItemMessage(hDlg,IDD_STRING1,EM_LIMITTEXT,MAXLEN - 1, 0);
sprintf(szString2,"%2.0lf",v);
SetDlgItemText(hDlg,IDD_STRING2,szString2);//scrie în fereastra
SendDlgItemMessage (hDlg, IDD_STRING2, EM_SETSEL,0,MAXLEN - 1) ;
return( TRUE );
} // End WM_INITDIALOG
case WM_COMMAND:
{
if (( HIWORD(wParam) == BN_CLICKED)
&&(LOWORD(wParam)==IDOK) ) // If butonul OK
{
GetDlgItemText (hDlg, IDD_STRING1, szString1, MAXLEN) ;
x = strtod(szString1, &pEnd);
GetDlgItemText (hDlg, IDD_STRING2, szString2, MAXLEN) ;
v = strtod(szString2, &pEnd);
sprintf(sz_str,"P(%lf,%2.0lf)=%lf",x,v,Student(x,v));
SendDlgItemMessage(hDlg, 100, LB_ADDSTRING, 0, (LPARAM)sz_str);
// cursorul la sfarsit
i=SendDlgItemMessage(hDlg,100, LB_GETCOUNT, 0,0);
SendDlgItemMessage(hDlg,100, LB_SETCURSEL, i-2,0);
return(TRUE);
}//OK
if(wParam == IDCANCEL )// sfarsitul dialogului
{
DeleteObject( GetProp( hDlg, MAKEINTATOM( 10000 ) ) );
// Termina atribuirea proprietatilor
RemoveProp( hDlg, MAKEINTATOM( 10000 ) );
EndDialog( hDlg, TRUE ); // Termina dialogul
return( TRUE );
}//CANCEL
}//WM_COMMAND
} //switch
return( FALSE );
}// Sfarsit MainDlgProc()


Dialoguri comune

Dialogurile comune sunt disponibile prin sistemul de operare, de exemplu dialogul open/save, alegerea fontului, alegerea culorii, sau meniul print. Pentru meniul Open/Save avem urmatoarea descriere

Prototip:

BOOL GetOpenFileName(LPOPENFILENAME fileinfo);
returneaza TRUE dacă utilizatorul a selectionat un fisier
BOOL GetSaveFileName(LPOPENFILENAME fileinfo);
returneaza TRUE dacă utilizatorul a selectionat un fisier

Membrii structurii:

HWND hwndOwner; Fereastra parinte
DWORD lStructSize; Dimensiunea structurii trebuie cunoscuta intotdeauna
LPTSTR lpstrFilter;
Filtru pentru selectia dupa extensie a fisierelor disponibile
LPTSTR lpstrFile; Sir de caractere pentru stocarea caii pana la fisier. Minim 256 byte.
DWORD nMaxFile; Dimensiunea sirului de caractere *lpstrFile
LPCSTR lpstrTitle; Daca nu este Null, acesta va da titlul ferestrei de dialog
DWORD Flags; Exista multe variabile de acest tip, care pot fi la nivel de bit. Urmeaza cateva mai des intalnite:
OFN_HIDEREADONLY - Ascunde fisierele readonly
OFN_FILEMUSTEXIST - Fisierul selectat de utilizator
OFN_ALLOWMULTISELECT - Permite selectarea simultana a mai multor fisiere.

Examplu: GetOpenFileName

#include <windows.h>
#include <string.h>
#include <stdio.h>

int main(void)
{
OPENFILENAME file; BOOL bret; char FileName[1000]="";
memset(&file,0,sizeof(file));
file.lStructSize = sizeof(file);
file.Flags = OFN_HIDEREADONLY;
file.lpstrFile=FileName; file.nMaxFile=1000;
file.lpstrFilter=
"Fisier de tip text(*.txt)\0*.txt;*.text\0Fisiere de tip C\0*.c;*.cpp\0";
bret=GetOpenFileName(&file);
if(bret==FALSE) { printf("Nimic selectat"); return 1; }
printf("File Name: %s\n",FileName);
return 0;
}


Examplu: GetSaveFileName

#include <windows.h>
#include <string.h>

int main(void)
{
OPENFILENAME file;
memset(&file,0,sizeof(file));
file.lStructSize = sizeof(file);
GetSaveFileName(&file);
return 0;
}

  Previous Topic Topic   
 Forum Locked
 Send Topic to a Friend
 Printer Friendly
Jump To:
duci.ro FORUM at forumco.com © 2000-05 ForumCo.com Go To Top Of Page
Generated in 0.12 seconds. Hello from Duci !!! Snitz Forums 2000
RSS Feed 1 RSS Feed 2
Powered by ForumCo 2000-2008
TOS - AUP - URA - Privacy Policy
ForumCo Free Blogs and Galleries
Signup for a free forum or Go Banner Free