Değerli programcı arkadaşlarım yine kafamın karışık olduğu zamanlardan birindeyim :(
Qt ile C++ programlama mükemmel bir şey bu benim şahsi fikrim ancak yakın bir dostum ve iyi bir programcı arkadaşım iyi bir iş çıkarmak için kolay yolları tercih etmektense (Qt vs. kastediyor) Visual Studio'da windows kütüphaleri ile bu işin yapılması gerektiği konusunda beni ikna etmeye çalışyor ve ısrarcı şekilde de yardımcı oluyor anlatıyor vs.. Fakat tüm bunların yanında ben görsel bir şeyler yapmanın bu arkadaşımın yöntemleriyle inanılmaz zor olduğunu görüyorum. İlk defa dökümana bakmama rağmen bu kadar zorlanıyorum diyebilirim. İçinde iki textbox iki buton 1 combobox 1 scroll bar olan ve herşeyi de tam manasıyla yerli yerine oturtamadığım bir program için şu kadar kodu sıfırdan elle yazmaktan bahsediyorum :(
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#define IDI_TEXT1 10001
#define IDI_BUTTON1 10002
#define IDI_BUTTON2 10003
#define IDI_TEXTBOX1 10004
#define IDI_TEXTBOX2 10005
#define IDI_COMBOBOX1 10006
#define IDI_SCROLLBAR1 10007
WNDCLASSEX wcex;
HWND hw;
MSG m;
HFONT myfont;
HWND hwtext1;
HWND hwbutton1;
HWND hwbutton2;
HWND hwtextbox1;
HWND hwtextbox2;
HWND hwcombobox1;
HWND hwscrollbar1;
SCROLLINFO scrollbar1info;
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=0;
wcex.hIconSm=0;
wcex.hbrBackground=(HBRUSH)(COLOR_3DFACE+1);
wcex.hCursor=LoadCursor(0,IDC_ARROW);
wcex.lpszClassName="MyClass";
wcex.lpszMenuName=0;
RegisterClassEx(&wcex);
hw=CreateWindowEx(0,"MyClass","MyWindow",WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,200,200,500,400,0,0,hInstance,0);
myfont=CreateFont(12,0,0,0,FW_DONTCARE,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"MS Sans Serif");
hwtext1=CreateWindowExW(0,L"STATIC",L"This is a text",WS_VISIBLE|WS_CHILD,20,20,200,25,hw,(HMENU)IDI_TEXT1,0,0);
hwbutton1=CreateWindowExW(0,L"BUTTON",L"Copy TextBox Content to Static Text",WS_VISIBLE|WS_CHILD,20,100,200,25,hw,(HMENU)IDI_BUTTON1,0,0);
hwbutton2=CreateWindowExW(0,L"BUTTON",L"Get ComboBox Selection",WS_VISIBLE|WS_CHILD,20,140,150,25,hw,(HMENU)IDI_BUTTON2,0,0);
hwtextbox1=CreateWindowExW(WS_EX_CLIENTEDGE,L"EDIT",L"This is a text box",WS_VISIBLE|WS_CHILD|ES_LEFT|ES_AUTOHSCROLL,20,55,200,21,hw,(HMENU)IDI_TEXTBOX1,0,0);
hwtextbox2=CreateWindowExW(WS_EX_CLIENTEDGE,L"EDIT",L"This is\r\na multi line\r\ntext box",WS_VISIBLE|WS_CHILD|WS_VSCROLL|ES_LEFT|ES_MULTILINE|ES_WANTRETURN,240,55,200,202,hw,(HMENU)IDI_TEXTBOX2,0,0);
hwcombobox1=CreateWindowExW(WS_EX_CLIENTEDGE,L"COMBOBOX",L"",WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,240,25,120,200,hw,(HMENU)IDI_COMBOBOX1,0,0);
hwscrollbar1=CreateWindowExW(0,L"SCROLLBAR",L"",WS_CHILD|WS_VISIBLE|SBS_HORZ,50,225,150,25,hw,(HMENU)IDI_SCROLLBAR1,0,0);
SendMessage(hwtext1,WM_SETFONT,(WPARAM)myfont,0);
SendMessage(hwbutton1,WM_SETFONT,(WPARAM)myfont,0);
SendMessage(hwbutton2,WM_SETFONT,(WPARAM)myfont,0);
SendMessage(hwtextbox1,WM_SETFONT,(WPARAM)myfont,0);
SendMessage(hwtextbox2,WM_SETFONT,(WPARAM)myfont,0);
SendMessage(hwcombobox1,WM_SETFONT,(WPARAM)myfont,0);
SendMessage(hwtextbox1,EM_LIMITTEXT,25,0);
SendMessage(hwcombobox1,CB_RESETCONTENT,0,0);
SendMessage(hwcombobox1,CB_ADDSTRING,0,(LPARAM)"Combo");
SendMessage(hwcombobox1,CB_ADDSTRING,0,(LPARAM)"Box");
SendMessage(hwcombobox1,CB_ADDSTRING,0,(LPARAM)"Example");
SendMessage(hwcombobox1,CB_ADDSTRING,0,(LPARAM)"Items");
scrollbar1info.cbSize=sizeof(SCROLLINFO);
scrollbar1info.fMask=SIF_RANGE|SIF_PAGE|SIF_POS;
scrollbar1info.nMin=0;
scrollbar1info.nMax=50;
scrollbar1info.nPage=10;
scrollbar1info.nPos=0;
scrollbar1info.nTrackPos=0;
SetScrollInfo(hwscrollbar1,SB_CTL,&scrollbar1info,1);
ShowWindow(hw,SW_SHOW);
while(GetMessage(&m,0,0,0)){
TranslateMessage(&m);
DispatchMessage(&m);
}
DestroyWindow(hwtext1);
DestroyWindow(hwbutton1);
DestroyWindow(hwtextbox1);
DestroyWindow(hwtextbox2);
DestroyWindow(hwcombobox1);
DeleteObject(myfont);
ShowWindow(hw,SW_HIDE);
DestroyWindow(hw);
UnregisterClass("MyClass",hInstance);
ExitProcess(0);
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
unsigned short wParamH=HIWORD(wParam);
unsigned short wParamL=LOWORD(wParam);
if(Msg==WM_COMMAND){
if(wParamH==BN_CLICKED){
char txt[100];
if(wParamL==IDI_BUTTON1){
GetWindowText(hwtextbox1,txt,100);
SetWindowText(hwtext1,txt);
}else if(wParamL==IDI_BUTTON2){
LRESULT i=SendMessageW(hwcombobox1,CB_GETCURSEL,0,0);
wsprintf(txt,"%i",i);
MessageBox(hw,txt,"ComboBox Value",MB_ICONASTERISK|MB_OK);
}
}
}else if(Msg==WM_HSCROLL || Msg==WM_VSCROLL){
int CurPos=GetScrollPos((HWND)lParam,SB_CTL);
if(wParamL==SB_LINEUP || wParamL==SB_LINELEFT){
CurPos-=1;
}else if(wParamL==SB_LINEDOWN || wParamL==SB_LINERIGHT){
CurPos+=1;
}else if(wParamL==SB_PAGEUP || wParamL==SB_PAGELEFT){
CurPos-=5;
}else if(wParamL==SB_PAGEDOWN || wParamL==SB_PAGERIGHT){
CurPos+=5;
}else if(wParamL==SB_THUMBPOSITION){
CurPos=wParamH;
}else if(wParamL==SB_THUMBTRACK){
CurPos=wParamH;
}
SetScrollPos((HWND)lParam,SB_CTL,CurPos,1);
}else if(Msg==WM_CLOSE){
int Result=MessageBox(hw,"Are you sure?","My Application",MB_ICONQUESTION|MB_YESNO);
if(Result==IDNO){
return 0;
}
}else if(Msg==WM_DESTROY){
PostQuitMessage(0);
}
return DefWindowProc(hWnd,Msg,wParam,lParam);
}
Bunu bu şekilde öğrenmek ve kavramak ile Qt kütüphanelerini kullanarak kavramak bana neler kazandırır neler kaybettirir. Bilenler beni anlıyorlardır sanırım. Şimdiden teşekkürler...