C++ FORMA RESİM EKLEME
Dev C++ ile yapılmış örnek bir Windows form uygulaması. C++ ile Windows form oluşturan ve bu forma 3 adet resim ekleyen program örneği.
Merhaba,
C++ ile ilk uğraşmaya başladığımda karşılaştığım en büyük sorun kaynak sorunuydu. Kitap ve sitelerdeki örnekler ve açıklamalar alışılmış konsol uygulamalarının önüne geçmiyordu. Bildik for döngüleri ve diziler, basit matematik hesaplarla ancak sınırlı bir yere kadar gidebiliyorsun.
Fırsat bulduğum şu zamanlarda bu konuda bol makale ve örnek yazmaya karar verdim. Daha önce ekrana textbox atayan ve bunlara girilen değerleri toplayan örnek bir uygulama vermiştim. Bu bölümde forma resim eklemeyi ele alacağım.
C# ta bu işi toolbox’tan sürükle bırak yaparak anında hallediyoruz. Ancak bu programcılık değildir. C# taki gibi toolbox kontrolünü c++ ile de yapmak mümkündür. Kaldı ki C# kontrolleri de bir yazılım ürünüdür.
Önemli olan programlamaya hakim olmak, her türlü yazılımı yapabilmek ve daha sonra ihtiyaçlar doğrultusunda en uygun çözüm yolunu sunmaktır. Windows’un tekelleşmesine karşılık Linux ve Android’in daha da önem kazanması, gelecekte C++ yı daha önemli bir hale getirecektir diye düşünüyorum.
Sonuçta yazdığınız bir programın her yanına hakim olmanız, o programı en baştan tüm kontrolleriyle sizin oluşturmanıza bağlıdır.
Örneğimize gelirsek önce 3 adet resmi photoshop veya Paint programında açarak bu resimleri bitmap türüne çevirin ve uygulamanızı kaydedeceğiniz klasöre kopyalayın.
Bundan sonra DEV C++ ile yeni bir proje oluşturun. Ben her zaman yaptığım gibi boş proje oluşturuyorum.
File>>New>>Project adımları ile "New Project" penceresini açıyoruz. Bu pencereden Empty Project seçeneğini seçiyoruz. Projeye bir isim verip "OK" buttonuna tıklıyoruz. Sonrasında bize projeyi nereye kaydedeceğimizi soran bir ekran gelecektir. Belli bir klasör seçerek uygulamayı kaydediyoruz. Bundan sonraki adım projenin bir Windows uygulaması olduğunu derleyiciye bildirmek. Bunun için Project >> Project Options adımları ile "Project Options" penceresini açıyoruz. Sağ tarafta type bölümünden "WIN32 GUI" seçeneğini seçerek "OK" buttonuna tıklıyoruz.
Şimdi sıra uygulamayı yazacağımız kaynak dosyayı kaydetmeye geldi. Projeyi ilk oluşturduğunuzda ekranda beyaz bir sayfa belirmiştir. Bu sayfanın başlığı muhtemelen Untitle dir. File>> Save As adımları ile bu sayfayı da projeyi kaydettiğiniz klasöre kaydedin. Bu arada bir isim verin.
Şimdi artık aşağıdaki kodları yazabilirsiniz. Ben resimleri tanımlamak için ayrı bir fonksiyon oluşturdum ve orada oluşturduğum bitmap nesneleriyle resimlerin adını ve nerede gösterileceklerini belirledim. Bu resimleri formun ve form araçlarının yaratıldığı bölümde en alta yazın. Çünkü bu bölümde önce form oluşturulur, daha sonra textboxlar oluşturulacaktır. En son sizin resim atama fonksiyonu çağrılmalı. Eğer resim atama fonksiyonunu PictureBox'ları oluşturmadan önce çağırırsanız resim görünmeyecektir. Sebebi basit henüz PictureBox'lar oluşturulmamış.
Bu arada şunu da söyleyeyim Visual Studio da da yöntem ve kodlar aynıdır. Ben Visual Studio uygulamasında da boş proje oluşturduğum için yazdığım kodlar iki tarafta da çalışır.
Tüm kodlar aşağıdadır.
Kolay gelsin
#include <windows.h>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <sstream>
#define PCTRBOX1 401
#define PCTRBOX2 402
#define PCTRBOX3 403
HWND PictureBox1;
HWND PictureBox2;
HWND PictureBox3;
void ShowImage();
using namespace std;
LRESULT CALLBACK WndProc(HWND win_id, UINT Messengr, WPARAM prmw, LPARAM prml)
{
switch(Messengr) {
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
case WM_COMMAND:
switch(prmw)
{
}
default:
return DefWindowProc(win_id, Messengr, prmw, prml);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG msg;
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "PENCERE OLUSTURMA","HATASI",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","RESİM ÖRNEĞİ",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
1020,
700,
NULL,NULL,hInstance,NULL);
PictureBox1 = CreateWindow("static", "picturebox", WS_CHILD | WS_VISIBLE | SS_BITMAP, 260, 60, 300, 300, hwnd, HMENU(PCTRBOX1), hInstance, NULL);
PictureBox2 = CreateWindow("static", "picturebox", WS_CHILD | WS_VISIBLE | SS_BITMAP, 570, 60, 300, 300, hwnd, HMENU(PCTRBOX2), hInstance, NULL);
PictureBox3 = CreateWindow("static", "picturebox", WS_CHILD | WS_VISIBLE | SS_BITMAP, 260, 250, 300, 300, hwnd, HMENU(PCTRBOX3), hInstance, NULL);
if(hwnd == NULL) {
MessageBox(NULL, "PENCERE OLUSTURMA HATASI","HATA",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
ShowImage();
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
void ShowImage()
{
HBITMAP bitmap1 = (HBITMAP)LoadImage(GetModuleHandle(NULL), "papatya1.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
HBITMAP bitmap2 = (HBITMAP)LoadImage(GetModuleHandle(NULL), "papatya2.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
HBITMAP bitmap3 = (HBITMAP)LoadImage(GetModuleHandle(NULL), "papatya3.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
SendMessage(PictureBox1, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bitmap1);
SendMessage(PictureBox2, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bitmap2);
SendMessage(PictureBox3, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bitmap3);
}
C++ WİNDOWS FORM İLE TOPLAMA İŞLEMİ
SANATSAL BİLGİ
30/12/2016