|
|
| На центральну | Що нового | Що цікавого | Структура сайту... |
| ПРО ЦЕ... | Що тут нового | Що тут цікавого |
|
|
Інформація готується...
Я жахливо плутаюся в україномовній програмерській термінології! Та хіба тільки я?..
Роздуми що до двох стилів ООП
CString при передачі параметрів аргументу char* лається. Потрібно писати const char*.
А як на те вже пішло, то непогано було б узагалі писати LPSTR і LPCSTR відповідно. А ще краще: LPTSTR и LPCTSTR! У чому різниця? Те, що з буквою "T" - це потенційні строки UNICODE. Не знаю як ви, а я вже звик усі строкові константи записувати у макросі _T()...
І взагалі, використання скрізь де прийдеться аргументів char* сильно збиваю з пантелику: незрозуміло, чи то вхідний аргумент функції, чи то буфер для результату. Особливо, якщо саму функцію писав не ти. Приведення "в лоб" (LPSTR) (LPCSTR) strSomeParam - спроба передачі CString як параметру char* - може призвести и скоріше за все призведе до помилки, якщо це як раз саме буфер для результату. От такі от проблеми інтеграції "гетеропрограммістського" початкового тексту (source code)... :)
Для програмного вибору радіокнопки використовуйте функцію
BOOL CheckRadioButton( HWND hDlg, // handle to dialog box int nIDFirstButton, // identifier of first radio button in group int nIDLastButton, // identifier of last radio button in group int nIDCheckButton // identifier of radio button to select );
Якщо вам необхідно описати набір якихось значень, який буде використано для означення декількох станів будь-чого та передачі цього в діалог etc., використовуйте enum у невеличкому заголовочному файлі типу:
#if !defined(AFD_YOURVALNAME_H__INCLUDED_)
#define AFD_YOURVALNAME_H__INCLUDED_
enum eYourValName
{
VAL_UNDEFINE = 0,
VAL_FIRST = 1,
VAL_SECOND,
...
};
#endif // !defined(AFD_YOURVALNAME_H__INCLUDED_)
що дозволяє включати його коли буде потрібно та де буде потрібно, не хвилюючись про помилки переозначення, та використовувати єдині символічні імена на протязі усього проекту.
Для отримання немодального діалогу можна додати вказівник (pointer) на необхідний клас в яке-небудь місце, наприклад клас "батьківського" (parent) вікна, та ініціалізувати його один раз. Це можна зробити або у конструкторі "батька", або в функції, яка призначена для відображення цього діалогу. Для відображення викликається функція Create(), котру для зручності роботи необхідно переpевизначити. Для повторних викликів діалогу Create викликати немає потреби, необхідно використовувати ShowWindow(SW_SHOW). Функція виклику цього діалогу може бути такою:
void CYourOwner::OnProjectSettings()
{
if(m_pDlg == NULL)
{
m_pDlg = new CProjectDlg;
m_pDlg->Create();
}else
m_pDlg->ShowWindow(SW_SHOW);
}
При цьому на весь час існування "батька" відкривається один діалог. Для кожного екземпляру "батька" (або хазяїна).
І не забудьте при цьому у деструкторі хазаїна знищити вказівник (pointer) на клас діалогу.
... delete m_pDlg; ...Ну взагалі-то напевне зручніше у конструкторі хазяїна ініціювати вказівник не NULL, а створювати діалог. Це дозволить здихатися постійної перевірки наявності відсутності відмінності вказівника (pointer) від NULL в усіх можливих місцях його використання.
Для коментарів "по тексту" у C++ варто використовувати варіант "//" - тоді буде можливість коментувати велики ділянки коду варіантом "/* */" і аж ніяк не турбуватися про те, що десь може зустрітися символ "*/", що призведе до порушення послідовності.
|
|