PDA

View Full Version : سوال: چگونه کنترل دکمه و تکس باکس و ... در win32 ایجاد کنیم؟



complexcoding
دوشنبه 30 آبان 1390, 15:42 عصر
سلام دوستان
چگونه در Win32 نرم افزارهای مانند اپلیکشن های سی شارپ یعنی با رابط کاربر گرافیکی قوی ایجاد کنیم؟
ممنون از پاسخ شما

r00tkit
سه شنبه 01 آذر 1390, 08:52 صبح
از نظر زمانی دیگه این کار مناسب نیست که فقط با win32 این کار انجام بشه معمولا با MFC یا Qt این کار رو می کنن

ولی اگه علاقه داری بدونی این کار چی جوری انجام می شه برای شروع می تونی لینک زیر رو بخونی




Basics
Getting Started
A Simple Window
Handling Messages
The Message Loop
Using Resources
Menus and Icons
Dialog Boxes
Modeless Dialogs
Standard Controls
Dialog FAQ
Creating a simple application
Creating controls at runtime
Files and the common dialogs
Tool and Status bars
Multiple Document Interface
Graphics Device Interface
Bitmaps and Device Contexts
Transparency
Timers and Animation
Text, Fonts and Colours
Tools and Documentation
References
Free Visual C++(updated)
Appendices
Solutions to Common Errors
API vs. MFC
Resource file notes
http://winprog.org/tutorial/

از یه MessageBox ساده شروع کرده تا menu و...

محمد فدوی
چهارشنبه 02 آذر 1390, 02:55 صبح
سلام...
همون طوری که گفته شد در مورد چنین کارایی استفاده از win32 چندان توجیه نداره ولی ممکنه!
برای مثال فکر کنم سخت ترین راه استفاده از CreateWindow باشه.
ویندوز چند کلاس پنجره بصورت پیشفرض داره و بقیه رو از همینا مشتق میکنه و فقط کافیه برای استفاده جای نام کلاس در CraeteWindow از نام کلاس استفاده کنی...
مثلا EDIT یا BUTTON یا LIST یا STATIC یا...

یکی از ساده ترین راه ها هم استفاده از دیالوگه شما یه دیالوگ توی Resource ها بساز بعد با تابع DialogBox اونو نشون بده...
اصلا اگه میخوای فقط میتونی اون دیالوگو نشون بدی و پنجره اصلی رو دیگه از کد حذف کنی...

jeson_park
چهارشنبه 02 آذر 1390, 12:57 عصر
با سلام
زیاد به صرفه نیست و وقت گیره
دوستان مثال نزدن
یه مثال کامل اینجا میزنم


#include <windows.h>
#include <winsock.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName [] = TEXT ("Window") ;
static HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_INFORMATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;

if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}

hwnd = CreateWindow (szAppName, TEXT ("Progam"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

HDC hdcClient;
PAINTSTRUCT ps ;

HWND hButton;
static HWND hEdit;

// The HGDIOBJ data type is a generalized handle to a GDI object
// and is defined as a 32-bit pointer, as are all the other GDI objects
HGDIOBJ hfDefault;
switch (message)
{
case WM_CREATE:

// Our Button
hButton = CreateWindowW(L"Button",
L"Button",WS_VISIBLE | WS_CHILD,
30,
50,
75,
30,
hwnd,
NULL,
GetModuleHandleW(NULL), //(HINSTANCE)GetWindowLongW(hwnd,GWL_HINSTANCE),
NULL);

// Our EditBox
hEdit =CreateWindow(TEXT("EDIT"),
NULL,
WS_CHILD | WS_VISIBLE |ES_MULTILINE | WS_BORDER,
50,
100,
100,
21,
hwnd,
NULL,
GetModuleHandleW(NULL),
NULL);
hfDefault=GetStockObject(DEFAULT_GUI_FONT);
SendMessage(hEdit,
WM_SETFONT,
(WPARAM)hfDefault,
MAKELPARAM(FALSE,0));

SendMessage(hEdit,
WM_SETTEXT,
(WPARAM)L"X",
(LPARAM)L"Insert text here...");
break;
case WM_CTLCOLOREDIT:
if ((HWND)lParam == hEdit)
{
hdcClient = (HDC)wParam;
SetBkMode(hdcClient, TRANSPARENT);
return (LRESULT)GetStockObject(TRANSPARENT);
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{

case BN_CLICKED:
{
hdcClient = GetDC(hwnd);
SetBkColor(hdcClient,TRANSPARENT);
}
}
}
break;
case WM_PAINT:
hdcClient = BeginPaint (hwnd, &ps) ;
hdcClient = GetDC(hwnd);
TextOut(hdcClient,10,30,TEXT("Test Message"),12);
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProcW (hwnd, message, wParam, lParam) ;
}

complexcoding
شنبه 05 آذر 1390, 10:59 صبح
ممنون از جواب های همتون خیلی استفاده کردم من می خواستم نر افزاری شبیه به مایا طراحی کنم چون برای ساخت بازی از win32 استفاده می کنند گفتم شاید بهتر باشه یا اصولش همینه که با همین زبان چنین نرم افزارهایی درست کنند لطفا در این زمینه بنده حقیر رو راهنمایی کنید ممنون.
برای ساخت نرم افزارهایی مانند کتیا و مایا و ... از چه تکنولوژی هایی استفاده می شه (چه زبانی بهتره؟)

vasilopita
شنبه 05 آذر 1390, 21:46 عصر
اگه اشتباه نکنم واسه نرم افزاری مثل maya و 3dmax از mfc استفاده کردن.