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
 New Topic  Reply to Topic
 Send Topic to a Friend
 Printer Friendly
Author Previous Topic Topic   

duci
Forum Admin


173 Posts

Posted - 07/18/2005 :  16:37:21  Show Profile  Email Poster Send duci a Private Message  Reply with Quote
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   
 New Topic  Reply to Topic
 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.11 seconds. Hello from Duci !!! Snitz Forums 2000
RSS Feed 1 RSS Feed 2
Powered by ForumCo 2000-2008
TOS - AUP - URA
ForumCo Free Blogs and Galleries
Signup for a free forum or Go Banner Free