Jump to content

[C++] Win32 API Editable Box


Cdorsu
 Share

Recommended Posts

Nu pot explica chiar atat de bine, dar incerc.

Cred ca ar trebui sa stiti putin Win32 API ca sa puteti intelege foarte bine tutorialul, nu este foarte greu de inteles.
Fara alte introduceri: Let's code!

#include <Windows.h>
 
HINSTANCE hInstance; //Variabila pe care o folosim atunci cand creeam Text Boxul
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT uInt, WPARAM wParam, LPARAM lParam);
 
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int iCmdShow)
{
::hInstance = hInstance;//Initializam variabila globala hInstance
HWND hwnd;
MSG msg;
 
WNDCLASSEX wnd = { 0 }; //clasa de baza, aici retinem informatii despre
wnd.cbSize = sizeof(wnd);
wnd.style = CS_HREDRAW | CS_VREDRAW; //Fereastra va fi desenata(redesenata) vertical si orizontal
wnd.lpfnWndProc = WndProc; //Cream legatura catre functia WndProc
wnd.hInstance = hInstance;
wnd.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //Vrem un fundal negru
wnd.lpszClassName = "Text box"; //Numele clasei formate
wnd.hCursor = LoadCursor(NULL, IDC_ARROW); //Cursorul standard(acea sageata)
 
if (!RegisterClassEx(&wnd))
{
MessageBox(NULL, "Can not register the class",
"Error", MB_OK | MB_ICONERROR);
return 1;
}
 
hwnd = CreateWindowEx(NULL,//Nu vrem un extra stil
"Text box", //Numele clasei pe care am inregistrat-o (wnd)
"Ceva nume", //Titlul ferestrei
WS_OVERLAPPEDWINDOW, //Stilul ferestrei - o fereastra normala
0,0, //Va arata fereastra la coordonatele 0, 0 pe ecran
1024, 800,//Vrem o fereastra cu 1024 x 800
NULL, NULL, //Nu avem fereastra "mama" si nici meniu
hInstance, //Primul parametru din WinMain
NULL); //Informatii "extra" - nu avem
 
if (!hwnd)
{
MessageBox(NULL, "Can not create the Window",
"Error", MB_OK | MB_ICONERROR);
return 1;
}
 
ShowWindow(hwnd, iCmdShow);
UpdateWindow(hwnd);
 
while (GetMessage(&msg, NULL, NULL, NULL)) //Atat timp cat primim mesaje de la utilizator
{
TranslateMessage(&msg); //Le traducem (ex: WM_CREATE)
DispatchMessage(&msg); //Si le trimitem in functia WndProc
}
return (int)msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT uInt, WPARAM wParam, LPARAM lParam) //Functia cu care "tratam" mesajele primite din WinMain
{
static HWND hwndEditBox = { 0 }; //Fereastra editabila
switch (uInt)
{
case WM_SIZE: //Atunci cand redimensionam fereastra
case WM_CREATE: //Atunci cand creeam fereastra (deschidem aplicatia)
RECT rect; //Variabila in care retinem cateva detalii despre fereastra (lungimea si latimea)
GetClientRect(hwnd, &rect); //Initializam variabila
hwndEditBox = CreateWindow("EDIT", //Daca priviti mai sus, o sa vedeti cum am creat o clasa "Text box".
//Aceasta este o clasa predefinita a Windows-ului
NULL,//Nu are nevoie de nume
//WS_CHILD - inseamna ca aceasta fereastra va apartine unei alteia si vor imparti aceeasi functie WndProc
//WS_VISIBLE - va fi vizibila
//WS_HSCROLL - va avea "bara de scroll" orizontala(cea de jos)
//ES_AUTOHSCROLL - atunci cand nu mai este loc pentru caractere, se va "scrola" automa in dreapta
//WS_VSCROLL - va avea "bara de scroll" verticala(cea din dreapta)
//ES_AUTOVSCROLL - acelasi lucru ca la ES_AUTOHSCROLL, dar pe verticala
//ES_LEFT - va incepe sa scrie la stanga
//ES_MULTILINE - va accepta mai multe linii
//ES_WANTRETURN - atunci cand apasam ENTER sa mearga pe alta linie
WS_CHILD | WS_VISIBLE | WS_HSCROLL | ES_AUTOHSCROLL | WS_VSCROLL | ES_AUTOVSCROLL |
ES_LEFT | ES_MULTILINE | ES_WANTRETURN,
0, 0, //Va aparea pe coordonatele 0, 0 in fereastra "mama"
rect.right, rect.bottom, //Inaltimea si latimea ferestrei
hwnd, //Fereastra "mama"
NULL, //Nu avem meniu
::hInstance,//Aceeasi instanta ca cealalta fereastra
NULL);//Nu avem informatii extra
SetWindowText(hwndEditBox, "Hello, World!");
return DefWindowProc(hwnd, uInt, wParam, lParam); //Ce face o fereastra normala in aceasta situatie (WM_CREATE sau WM_SIZE)
default:
return DefWindowProc(hwnd, uInt, wParam, lParam); //Ce face o fereastra normala in aceasta situatie
}
}
La prima fereastra am folosit functia ShowWindow(), deci nu a mai fost nevoie sa adaug WS_VISIBLE la stil(WS_OVERLAPPEDWINDOW).

Edited by Cdorsu
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.