Thursday, May 30, 2013

වැස්සයි... මමයි...

දවසක් කැම්පස් එකේ එක්සෑම් එකකට පාඩම් කර කර ඉද්දි වහින්න අරන් ටිකකින් කරන්ට් එකත් ගියා... පාඩම් කිරිල්ල පැත්තකට දාල වැස්ස ගැන කල්පනා කරන්න ගත්ත වෙලේ තමා මේ අදහස් හිතට ආවෙ...


බිදුවකි තවත්... 
තව තවත්...
හොරාවක් දෙකක්...
වුවත් නුබ සුමිතුරු...
විඩාබර මිහිකතට...
වීද මට පමණක්ම පස මිතුරු....
ඉදින් නුබ නම්...
තවත් මා බලා ඉන්නම්... 
~

Monday, May 20, 2013

නුඹ එනවානම්...




නුඹ එනවානම්...
අදුරු රැය නිසලයි...
කියන්නට දේ බොමැයි...
නුඹෙ සුමුදු වත සිහි වෙයි..
හද කොනක කවි ලතැවෙයි...

නැගෙන තරු මල් යායක්...
උණුසුමට මුදු හාදුවක්...
තවත් කුමටද පමාවක්...
එන්න තුරුලට ආයෙමත්...

හිරු නැගෙන්නට කල්පයක්...
අදුරු රැය රුදු සරදමක්...
නුබ එතැයි එක හීනයක්...
මග බලන්නම් සිය වරක්...

නැගෙන සුසුමන් සෙමින් නිතරම...
සිහි කරයි හද නුඹව අපමණ...
බැදුණු සෙනෙහස නුඹට, නොමියන...
සිත දවයි නුඹ දුරක බව දැන...
~

Sunday, May 19, 2013

C++, Win32 API එක පාවිච්චි කරල GUI එකක් ලේසියෙන්ම හදන හැටි...

සමාන්‍යයෙන් C++ වලින් GUI එකක් හදන්න ටිකක් අමාරුයි. අද මන් මේ කියා දෙන්න යන්නෙ ලේසියෙන්ම Win32 API එක පාවිච්චි කරල GUI එකක් හදන හටි. QT libraries යොදාගෙනත් කරන්න පුලුව්න්. ඒත් අද මන් මේ කියා දෙන විදියට එහෙම libraries මුකුත් ඕනි නෑ, ගොඩාක් ලේසි. මන් මේකට යොදගන්නෙ Visual Studio 2008. Drag and Drop විදියට GUI design කරන්න පුලුවන් මෙ විදියට කලාම.
ඔන්න එහෙනම් වැඩේ පටන් ගම්මු...

1) මුලින්ම VS 2008 වලින් අලුත් C++ Win32 ConsoleAplication Project  එකක් පටන් ගන්න. ඕනි විදියට නම් එහෙම දාගන්න පහලින් ;)   (මන් මෙතනදි දෙන්නෙ TestGUI කියල )


2) ඊලගට එන window එකෙන් project එකේ අනිත් settings හදන්න ඕනි. Application Settings වලදි Application Type: Console Application, Additional options: Empty Project විදියට හදන්න. (Precompiled Heder untik කරන්න.) ඒ ටික කරල ඉවර වෙලා Finish කරන්න.


3) Project Configurations
Right Click on Project-> Properties->Linker->System

SubSytem Windows එක (/SUBSYSTEM:WINDOWS) විදියට වෙනස් කරන්න.

Apply->OK


4) දැන් තියෙන්නෙ resource file එකක් add කරන්න.
Right Click on Resource Files filter in Project-> Properties->Add->New Item


Add New Item Window එකෙන් අලුත් Resource file එකක් Create කරගන්න. (කැමති නමක් දෙන්න , මන් මෙතනදි දෙන්නෙ MainGUI කියල )


5) දැන් Resource Files ෆිල්ටර් එකට MainGUI කියල .rc file එකක් ඇවිල්ල ඇති. දැන් ඒක double click  කරන්න. එතකොට Resource View එකට යයි. (ඔයාල වෙන නමක් දැම්මනම් ඒ දාපු නමින් .rc එකක් ඇති.)

Right Click on MainGUI.rc -> Add Resource...

Add Resource window  එකෙන් Dialog කියන එක කරල New button එක click කරන්න. ඊට පස්සෙ මේ පහලින් තියෙන දෙවනි ScreenShot එක වගේ තැනකට එයි.



දැන් අපිට කැමති විදියට එහා පැත්තෙ තියෙන ToolBox එකෙන් Itemsඩ්‍, drag and drop කරල කැමති විදියට අපේ GUI එක design කරගතැකි.


තාම වැඩ ඉවර නෑ. දැන් මේක Run කරගන්නත් එපැයි... ;) 

Header Files filter එකට resource.h කියල header file එකක් ඇවිල්ල ඇති. වැරදිලාවත් ඒකනම් delete කරන්නනම් එපා. ඒ file එක අපි resource file එක add කරද්දි auto generate වෙන file එකක්. ඒ header එකේ තමයි අපි resource file (GUI) එකට අඩ්ඩ් කරන components ඇත්තටම define වෙන්නෙ. 



6) දැන් .cppඑකක් අඩ්ඩ් කරගෙන ඉතුරු ටික කරන්නෙ.
Right Click on Source Files -> Add -> Add New Item
එතනින් C++ File , select කරල cpp එකට කැමති නමක් දෙන්න. ((මන් මෙතනදි දෙන්නෙ Main කියල )


දැන් ඒ cpp එකේ මේ ටික type කරන්න. 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <Windows.h>
#include <WindowsX.h>
#include <tchar.h>
#include "resource.h"

INT_PTR CALLBACK SD_DialogProc( HWND hwndDlg,  UINT uMsg, WPARAM wParam, LPARAM lParam  );

////////////////////////////////////////////////////////////////////////////////
int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPWSTR /*lpCmdLine*/, int /*nShowCmd*/)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),GetDesktopWindow(),SD_DialogProc);
return 0;
}

////////////////////////////////////////////////////////////////////////////////
BOOL SD_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);
void SD_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);


INT_PTR CALLBACK SD_DialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hwndDlg, WM_INITDIALOG, SD_OnInitDialog);
HANDLE_MSG(hwndDlg, WM_COMMAND, SD_OnCommand);
}

return FALSE;
}

BOOL SD_OnInitDialog(HWND hwnd, HWND /*hwndFocus*/, LPARAM /*lParam*/)
{
return FALSE;
}

void SD_OnCommand(HWND hwnd, int id, HWND /*hwndCtl*/, UINT /*codeNotify*/)
{
switch(id)
{
case IDOK:
{
MessageBox(hwnd, L"Welcome to C++ GUI building...!!!", L"Information", NULL);
}
break;

case IDCANCEL:
EndDialog(hwnd, 0);
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


මේ codeඑක ගැනත් පොඩ්ඩක් පැහැදිලි කරන්නම්.

අපි මේකෙ main method එක ඇතුලට අපි add කරපු dialog එකෙ නම දාල, Run කරන්න විතරයි දැන් තියෙන්නෙ. 



GUI එක Run වෙද්දිම මොනවහරි වෙන්න දෙයක් තියෙනවනම්

BOOL SD_OnInitDialog(HWND hwnd, HWND /*hwndFocus*/, LPARAM /*lParam*/)
{
return FALSE;
}

metod එක ඇතුලෙ ඒව ලියන්න ඕනි. උදාහරණයක් විදියට Combo Box එකකට default values පුරවන වගේ ඒව.
GUI එකෙන් එන Action Listen කරන්නෙ,

void SD_OnCommand(HWND hwnd, int id, HWND /*hwndCtl*/, UINT /*codeNotify*/)
{
}
අපි GUI එකට add කරන හැම component එකකටම Unique Id එකක් තියෙනව. ඒ id එක දල caseඑකක් ලියල අදාල component එකෙන් එන action listen කරතැකි.

උදා: IDOKකියන්නෙ මගේ GUI එකේ තියෙන OK button එකෙ Id එක. දැන් ඒ  button එක click කලාම ඊට අදාළව case එක ඇතුලෙ ලියල තියෙන වැඩේ තමා වෙන්නෙ.


switch(id)
{
case IDOK:
{
MessageBox(hwnd, L"Welcome to C++ GUI building...!!!", L"Information", NULL);
}
break;
}



එහෙනම් ඔන්න වැඩේ ඉවරයි. ප්‍රශ්න එහෙම තියෙනවනම් කොමෙන්ටුවක් දාල අහන්නකෝ...


 මම හදපු project එක ඔනිනම් පහළ ලින්ක් එකෙන් download කරගන්න. :-) 




Saturday, May 18, 2013

නෙත් කැල්ම...




රිවි කිරණ වැද දිලෙන...
පිණි බිද වැන්න...
සොදුරු ඔය නෙත් කැල්ම...
කුමක් වීද මා හට...
නුහුණුය මනෙතු...
වෙනත රදන්නට...
සැගවී යන්නෙම් මා...
ඔය දෑස තුලම තවත්...
ආදරෙන් තව තවත්...
~


මගේ ඇස් ඔයා ඉස්සරහ දිලිසෙනකොට, වයින් වීදුරුවක් බිදෙනව වගේ ඔයා හිනා උනා. වයින් බින්දු විසිරිල මගේ හිත තාමත් මත් වෙල වගෙ. මාව පාවෙලා පාවෙලා ගිහින් ආයිත් නවතින්නෙත් ඔයා ලගමයි... ඒ ඇයි කියන්න මන් දන්නෙ නෑ... 

Friday, May 17, 2013

පළමු පියවර...


මාත් ඉතින් බ්ලොග් එකක් ලියන්න කියල හිතුව. මේක ගොඩ කාලෙක ඉදල තිබ්බ අදහසක්, ඒත් පටන් ගන්නම සෑහෙන්න කල් ගියා වැඩි වගෙ... මාත් පුදුම කම්මැලියෙක් තමයි බැලුවම.
කොහොම උනත් කමක් නෑ දැන් ඔන්න පටන් ගත්තනෙ. මේක මෙහෙම පටන් ගන්න ලොකු උදව්වක් උනේ මගෙ සගයෙක් වන කේශාන්. කේෂාන්ගේ අන්තර්ජාල අවකාශය හැමදාම කියවද්දි මටත් හිතුන මාත් බ්ලොග් ලියන්න පටන් ගන්නවත් ඕනි කියල. මේක ඉතින් පුලුවන් තරම් හොදට කරගෙන යන්න තමයි මගෙනම් අදහස.
මුල්ම එක නිසා මන් කියවල තියෙන මන් ආසම කවියක් දාලම වැඩෙ පටන් ගන්න හිතුන. මේක මගේ නිර්මාණයක් නම් නෙමේ, උපුටා ගැනීමක්. ඇත්තම අයිතිකාරය මට සමාව දෙයි කියල හිතනව:) මේකට මන් මෙච්චර ආස ඇයි කියලනම් දන්නෙ නෑ... කියෙවුවෙ කොහෙන්ද කියලවත් මතක නෑ. කාලෙකට කලින් කියෙවුව එකක් කියල විතරයි මතක :)




වසන්තය අග පිපි රෝස පොහොට්ටුව...
කවි ලියා කුමටද නුඹ ගැන...
ඉඩෝරය...
ළග බැවින්...

(~උපුටා ගැනීමකි~)