بســم الله الـرحمــن الرحيــم
السلام عليكــم ورحمـة الله وبركاتــه ،،
الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين
اولا أنا سعيد لانضمامي الى هدا المنتدى و اسال الله جلى و على أن يوفقني الى أن افيد و استفيد
لدي مشروع شخصي هام، هدفه تطوير برنامج بسيط بلغة القرآن، بفظل الكتب اللتي قرآتها و حملتها من موضوع " كتب في البرمجة باستخدام Win32 API " و الانترنت، طورت البرنامج اللذي اريده و لكن واجهتني بعض الصعوبات فاتمنى أن تساعدوني في حلها و جزاكم الله خيرا
الخطوة الاولى هي فقط برمجة برنامج بلغة C باستخدام Win32-API و المترجم GCC، برنامج يشبه قارئ الاوامر مثل MSDOS، هدفي ليس MSDOS بل البرنامج اصلا بنوافد و ليس كونسول و لكن فقط يشبه MSDOS في عمله، مثال :
اكتب اسمك: محمد [ENTER]
اسمك هو محمد .
يعني برنامج يشبه الكونسول و لكنه بنوافد .
لتطبيق الخطوة الاولى استعملت EDIT_CONTROL و قمت لها بعمل WS_DISABLED لكي اقرئ ملامس لوحة المفاتيح، مثلا عندما اظغط على A يكتب البرنامج A في EDIT_CONTROL، و هكذا... لكن الحرف الثاني يكتب فوق الحرف الاول !
تنفيد البرنامج :
ظغط على A
ظغط على B
ارجو المساعدة و جزاكم الله خيرا، و من كانت له فكره احسن كاستعمال STATIC_CONTROL انا مستعد للعمل فقط اتمنى التعاون و شكرا .
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HBRUSH g_hbrBackground = NULL;
HWND hEdit;
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ){
switch(msg){
case WM_CREATE:
{
hEdit = CreateWindow("EDIT","",WS_VISIBLE|WS_CHILD|WS_BORDER|WS_VSCROLL|WS_HSCROLL|ES_MULTILINE|ES_WANTRET
URN|ES_AUTOHSCROLL|ES_AUTOVSCROLL|WS_DISABLED,0,0,100,100,hwnd,(HMENU)1,NULL,NULL);
}break;
case WM_COMMAND:
{
case WM_KEYDOWN:
{
switch(wParam)
{
case 'A':
SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)L"A");
break;
case 'B':
SendMessage(hEdit, WM_SETTEXT, 1, (LPARAM)(LPCTSTR)L"B");
break;
default:
break;
}
}
}break;
case WM_SIZE:
{
HWND hEdit;
RECT rcClient;
GetClientRect(hwnd, &rcClient);
hEdit = GetDlgItem(hwnd, 1);
SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
}break;
case WM_CTLCOLORSTATIC:
{
HDC hdc = (HDC) wParam;
HWND ctrl = (HWND) lParam;
SetBkMode( hdc, TRANSPARENT );
SetTextColor( hdc, RGB(0, 0, 0) );
return (LRESULT)GetStockObject(NULL_BRUSH);
}break;
case WM_DESTROY:
{
PostQuitMessage(0);
}break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
MSG msg;
HWND hwnd;
WNDCLASS wc;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.lpszClassName="window";
wc.hInstance=hInstance;
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;
wc.lpfnWndProc=WndProc;
wc.hCursor=LoadCursor(NULL, IDC_ARROW);
wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
RegisterClass(&wc);
hwnd=CreateWindow(
wc.lpszClassName,
"TEST",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
100,100,300,250,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
return(int)msg.wParam;}