PDA

Դիտել ողջ տարբերակը : C++ և GUI



Արամ
18.08.2013, 22:19
Տարբեր ֆորումներում կարդացի, որ GUI ստեղծելու համար Qt են օգտագործում, որը MFC-ից լավն է...այդքան էլ գլուխ չեմ հանում էս բնագավառում, հիմա խնդիրը նայեք ինչումն ա, ծրագրի հաշվարկող մասը գրել եմ C++-ով, բայց ինձ GUI-ի է պետք, ինչ օպտիմալ տարբերակներ կան, ու եթե հնարավոր է էդ տարբերակների հետ էլ գրքեր էլ ասեք, որ սովորեմ: :)

One_Way_Ticket
19.08.2013, 02:28
Qt-ի գլխավոր առավելությունը նրանում է, որ ինքը կրոսսպլատֆորմ է: Եթե քեզ մենակ Windows-ի տակ է պետք, կարող ես MFC օգտագործել:

Արամ
19.08.2013, 04:07
Qt-ի գլխավոր առավելությունը նրանում է, որ ինքը կրոսսպլատֆորմ է: Եթե քեզ մենակ Windows-ի տակ է պետք, կարող ես MFC օգտագործել:
Ինձ մենակ Windows-ի համար է պետք, որ խնդրեմ մի քիչ մանրամասն կբացատրես, թե ինչ խնդիրների առաջ կկանգնեմ մֆս-ի անցնելուց, կոդի հետ, մեկ էլ եթե հնարավոր է լավ գիրք մֆս-ի:

One_Way_Ticket
19.08.2013, 04:58
Ճիշտն ասած` ես 10 տարի առաջ եմ MFC-ով ծրագրավորել: Չեմ կարող հիմա որևէ գիրք խորհուրդ տալ:


ինչ խնդիրների առաջ կկանգնեմ մֆս-ի անցնելուց, կոդի հետ
Ոչ մի խնդիր: MFC-ն նույնպես C++ով է գրված, այսինքն GUI-ի կոդից հանգիստ կկանչես արդեն գրածդ հաշվարկային կոդը:

Արամ
19.08.2013, 05:04
Ճիշտն ասած` ես 10 տարի առաջ եմ MFC-ով ծրագրավորել: Չեմ կարող հիմա որևէ գիրք խորհուրդ տալ:


Ոչ մի խնդիր: MFC-ն նույնպես C++ով է գրված, այսինքն GUI-ի կոդից հանգիստ կկանչես արդեն գրածդ հաշվարկային կոդը:
Շնորհակալ եմ, ընթացքում որ հարցեր լինի հուսով եմ կօգնեք:)

Արամ
19.08.2013, 13:57
Շնորհակալ եմ, ընթացքում որ հարցեր լինի հուսով եմ կօգնեք:)

Նորմալ գիրք չգտա, մի քիչ սկզբի համար հարցեր տամ source code-րից օգնեք էլի:


BOOL CMyApp::InitInstance() // стандартная инициализация
{
m_pMainWnd=new CMainWnd(); // создать класс окна
ASSERT(m_pMainWnd); // проверить его правильность
m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно
m_pMainWnd->UpdateWindow(); // Обновить окно
return TRUE; // Вернуть что все нормально
};

ASSERT(m_pMainWnd), m_pMainWnd->UpdateWindow(); Էս երկու տողերի իմաստը կբացատրեք:

One_Way_Ticket
19.08.2013, 17:40
ASSERT(m_pMainWnd)
Assert է անում, որ p_MainWnd-ն NULL չէ: Եթե չգիտես assert-ը ինչ է, ասա, կբացատրեմ:


m_pMainWnd->UpdateWindow();
Պատուհանի վրա երբ ինչ-որ նկարչություն ես անում, Windows-ը ամեն անգամ մի պիքսելի արժեք փոխվելուց այն ավտոմատ չի թարմացնի էկրանի վրա: Այս ֆունկցիան հրամայում է թարմացնել:

One_Way_Ticket
19.08.2013, 18:27
Պատուհանի վրա երբ ինչ-որ նկարչություն ես անում, Windows-ը ամեն անգամ մի պիքսելի արժեք փոխվելուց այն ավտոմատ չի թարմացնի էկրանի վրա: Այս ֆունկցիան հրամայում է թարմացնել:
Ճիշտ չասացի: Արդեն ահագին մոռացել եմ MFC-ն :) Ցավոք սրտի, երկու բառով սա բացատրել չի լինի, ես էլ արդեն հոգնած եմ, վաղը մանրամասն կգրեմ:

Արամ
19.08.2013, 21:27
Assert է անում, որ p_MainWnd-ն NULL չէ: Եթե չգիտես assert-ը ինչ է, ասա, կբացատրեմ:
Չէ չգիտեմ, եթե դժվար չի :)

One_Way_Ticket
20.08.2013, 08:47
Ճիշտ չասացի: Արդեն ահագին մոռացել եմ MFC-ն :) Ցավոք սրտի, երկու բառով սա բացատրել չի լինի, ես էլ արդեն հոգնած եմ, վաղը մանրամասն կգրեմ:
Ուրեմն այսպես: Windows-ում կամայական պատուհան պիտի պատրաստ լինի ընդունել մեսսիջներ: Ասենք, երբ օգտվողը պատուհանի վրա left-click է անում, համակարգը պատուհանին մեսսիջ է ուղարկում, որ left click է տեղի ունեցել այսինչ կոորդինատի վրա: Ծրագրավորողը իր պատուհանը ժառանգում է որևէ պատուհան դասից ու իրեն հետաքրքրող մեսսիջների համար գրում է handler-ներ: Ասել է թե` ֆունկցիաներ, որոնք կանչվում են որպես պատասխան տվյալ մեսսիջին:
Ամենակարևոր մեսսիջներից մեկը WM_PAINT-ն է: Այն ուղարկվում է պատուհանին, երբ անհրաժեշտ է պատուհանի պարունակությունը մասամբ կամ ամբողջությամբ վերանկարել: Որոշ դեպքերում այն ուղարկվում է ավտոմատ կերպով: Օրինակ, երբ minimize արված պատուհանը վերաբացվում է: Այլ դեպքերում, երբ պարունակությունը փոխվել է որևէ ծրագրի ներքին տրամաբանության արդյունքում (ասենք, օգտվողը ստեղնաշարի վրա կոճակ է սեղմել, ու ծրագիրը պետք է որևէ բան նկարի), Windows-ը ի՞նչ իմանա, որ պատուհանի պարունակությունը փոխվել է, և հատկապես որ մասն է փոխվել: Ամեն վայրկյան եթե ամբողջ պատուհանը վերանկարվեր, էկրանը անընդհատ թռթռալու էր: Դրա համար պետք է օգնել Windows-ին: UpdateWindow մեթոդը պատուհանին ուղարկում է WM_PAINT մեսսիջը, որպեսզի ամբողջ պատուհանը վերանկարվի:

One_Way_Ticket
20.08.2013, 08:53
Չէ չգիտեմ, եթե դժվար չի :)
Քյառթերի լեզվով ասած` ASSERT-ը նշանակում է "հորս արև" :D
Ավելի հասկանալի լեզվով դա նշանակում է` տվյալ boolean արտահայտությունը պարտավոր է true լինել: Եթե այն false է, նշանակում է ծրագրում բագ կա: Ծրագիրը աշխատելու ժամանակ կստուգի այդ պայմանը, և եթե false է, հաղորդագրություն կտա այդ մասին և կավարտի աշխատանքը:
Assert-ները ստեղծված են ծրագրի տեստավորումը հեշտացնելու համար: Լավ ծրագրավորողները իրենց կոդում լիքը assert-ներ են շարում, հետո երբ որևէ տեստի վրա որևէ assert թռնում է, debug են անում, պարզում են թե ինչու է դա տեղի ունեցել: Ոչ այնքան լավ ծրագրովորողները (օրինակ, ես) assert-ներ երբեք չեն օգտագործում :)
Քանի որ assert-ի նպատակը ծրագրի ներքին տեստավորումն է, դրանք իրականացվում են ինչ-որ մակրոյի տեսքով, որը ստուգումը կատարում է միայն ծրագրի debug տարբերակում: Release տարբերակում, որը ուղարկվում է գնորդին, assert-ը ոչինչ չի անում, որպեսզի ավելորդ տեղը ծրագրի աշխատանքը չդանդաղեցնի:

Արամ
20.08.2013, 18:14
Ուրեմն այսպես: Windows-ում կամայական պատուհան պիտի պատրաստ լինի ընդունել մեսսիջներ: Ասենք, երբ օգտվողը պատուհանի վրա left-click է անում, համակարգը պատուհանին մեսսիջ է ուղարկում, որ left click է տեղի ունեցել այսինչ կոորդինատի վրա: Ծրագրավորողը իր պատուհանը ժառանգում է որևէ պատուհան դասից ու իրեն հետաքրքրող մեսսիջների համար գրում է handler-ներ: Ասել է թե` ֆունկցիաներ, որոնք կանչվում են որպես պատասխան տվյալ մեսսիջին:
Ամենակարևոր մեսսիջներից մեկը WM_PAINT-ն է: Այն ուղարկվում է պատուհանին, երբ անհրաժեշտ է պատուհանի պարունակությունը մասամբ կամ ամբողջությամբ վերանկարել: Որոշ դեպքերում այն ուղարկվում է ավտոմատ կերպով: Օրինակ, երբ minimize արված պատուհանը վերաբացվում է: Այլ դեպքերում, երբ պարունակությունը փոխվել է որևէ ծրագրի ներքին տրամաբանության արդյունքում (ասենք, օգտվողը ստեղնաշարի վրա կոճակ է սեղմել, ու ծրագիրը պետք է որևէ բան նկարի), Windows-ը ի՞նչ իմանա, որ պատուհանի պարունակությունը փոխվել է, և հատկապես որ մասն է փոխվել: Ամեն վայրկյան եթե ամբողջ պատուհանը վերանկարվեր, էկրանը անընդհատ թռթռալու էր: Դրա համար պետք է օգնել Windows-ին: UpdateWindow մեթոդը պատուհանին ուղարկում է WM_PAINT մեսսիջը, որպեսզի ամբողջ պատուհանը վերանկարվի:
Փառք Աստծո մեկը կարողացավ ինձ նորմալ բացատրել թե ինչպես են էդ պատուհանները աշխատում, շնորհակալ եմ, շարունակեմ բզբզալ :)

Արամ
29.08.2013, 15:36
Կարող է պատահաբար, փորձված MFC-ի ուչեբնիկի լինկ տաք:

Աթեիստ
29.08.2013, 16:57
http://avaxsearch.com/avaxhome_search?q=mfc&a=&commit=Search&c=5&l=&sort_by=

Լինկն արդեն դրել էի, որ տեսա գրածդ «փորձված» բառը ։)
Ոչ մեկը չեմ փորձել ։)