USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« : 02-05-2006 08:40 » |
|
Создал диалог в ресурсах. В программе создаю его через CreateWindow как дочернее окно, но и в OnInitDialog и в OnCreate контролы делага пока еще не созданы, по приходу WM_Paint они уже созданы... А в какой конкретно момент они создаются чтобы я мог допустим поменять их размер?
|
|
« Последнее редактирование: 02-05-2006 09:03 от Джон »
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #1 : 02-05-2006 09:03 » |
|
Покажи как ты это делаешь? В OnInitDialog обычно контроллы уже окна - можно вызывать все оконные ф-ции если у тебя не модальный диалог, то ты должен использовать ф-ю CDialog::Create(Id, Parent) Если ты используешь CreateWindow(), то в OnCreate твоего диалога ты должен вызывать все Create для каждого контрола, там же и размер задавать зы Свои сообщения можно редактировать
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #2 : 02-05-2006 09:12 » |
|
Создаю вот так:
//Создаем окно m_VideoDlg.Create(IDD_VIDEOVIEW_DLG, this);
//Покажем окно просмотрщика m_VideoDlg.ShowWindow(SW_NORMAL);
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #3 : 02-05-2006 09:58 » |
|
Хм странно - всё правильно. И OnInitDialog не вызывается? Ща попробовал у себя вот лог CComStateDlg::OnInitDialog() line 71 AfxDlgProc(HWND__ * 0x0001086e, unsigned int 272, unsigned int 67696, unsigned int 67696) line 35 + 14 bytes USER32! 77e01ef0() USER32! 77e1310e() USER32! 77e1372a() USER32! 77e03d1e() USER32! 77e03d9a() CWnd::DefWindowProcA(unsigned int 272, unsigned int 67696, long 0) line 1011 + 32 bytes CWnd::Default() line 258 CDialog::HandleInitDialog(unsigned int 67696, unsigned int 67696) line 624 + 8 bytes CWnd::OnWndMsg(unsigned int 272, unsigned int 67696, long 0, long * 0x008cf0c8) line 1826 + 17 bytes CWnd::WindowProc(unsigned int 272, unsigned int 67696, long 0) line 1596 + 30 bytes AfxCallWndProc(CWnd * 0x016c80c8 {CComStateDlg hWnd=???}, HWND__ * 0x0001086e, unsigned int 272, unsigned int 67696, long 0) line 215 + 26 bytes AfxWndProc(HWND__ * 0x0001086e, unsigned int 272, unsigned int 67696, long 0) line 379 AfxWndProcBase(HWND__ * 0x0001086e, unsigned int 272, unsigned int 67696, long 0) line 220 + 21 bytes USER32! 77e01ef0() USER32! 77e03523() USER32! 77e16f5b() USER32! 77e17677() USER32! 77e1477a() CWnd::CreateDlgIndirect(const DLGTEMPLATE * 0x00484ec0, CWnd * 0x01125d58 {CMainFrame hWnd=???}, HINSTANCE__ * 0x00400000) line 327 + 36 bytes CDialog::CreateIndirect(const DLGTEMPLATE * 0x00484ec0, CWnd * 0x01125d58 {CMainFrame hWnd=???}, void * 0x00000000, HINSTANCE__ * 0x00400000) line 223 CDialog::CreateIndirect(void * 0x00484ec0, CWnd * 0x01125d58 {CMainFrame hWnd=???}, HINSTANCE__ * 0x00400000) line 200 + 22 bytes CDialog::Create(const char * 0x0000009b, CWnd * 0x01125d58 {CMainFrame hWnd=???}) line 182 + 20 bytes CDialog::Create(unsigned int 155, CWnd * 0x01125d58 {CMainFrame hWnd=???}) line 543 + 29 bytes CComStateDlg::Create() line 65
Те начинается Create и заканчивается OnInitDialog Вот так я вызываю m_pComStateDlgModeless = new CComStateDlg(this); if (m_pComStateDlgModeless->Create()) {
} SetActiveWindow();
Просмотри ещё раз внимательно свой код
|
|
« Последнее редактирование: 02-05-2006 10:02 от Джон »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #4 : 02-05-2006 15:13 » |
|
USBLexus, попробуй через DialogBox(). Не знаю, есть ли такая ф-ия (или метод) в MFC, но в чистом Win32 API это работает. .... DialogBox(hThisInst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)&DlgProc1); .... case WM_INITDIALOG: SendMessage((HWND)GetDlgItem(hwnd,IDC_RADIO2),BM_SETCHECK,BST_CHECKED,0); ....
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #5 : 03-05-2006 02:03 » |
|
OnInitDialog вызывается, только в нем контролы все еще не созданы их hwnd =NULL
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #6 : 03-05-2006 08:20 » |
|
Что-ты не так делаешь в другом месте. В OnInitDialog - элемены уже окна ВСЕГДА, так же как и основное окно. Кстати что у тебя с хэндлом основного окна? Последовательность такая: OnInitDialog будет вызыван после Create диалога. В Create диалога должны быть созданы все статические контролы. Покажи свою Create диалога.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #7 : 03-05-2006 08:46 » |
|
Джон, Извини не понял что показать, функцию Create - ч ее не переопределял, стандартная
Если OnCreate
int CVideoDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) // //Окно создано // { //Создаем битмап CDC* pDC=GetDC(); m_DibObject.CreateBitmap(pDC, FrameWidth, FrameHeight); ReleaseDC(pDC);
//Изменяем размер окна под картинку // CRect SliderRect; // m_FrameSlider.GetWindowRect(&SliderRect); this->SetWindowPos(NULL, 0, 0, FrameWidth, FrameHeight/*+SliderRect.Height()*/, SWP_NOREPOSITION);
return CDialog::OnCreate(lpCreateStruct); }
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #8 : 03-05-2006 14:21 » |
|
Я вот это имел ввиду - где у тебя хранится? //Создаем окно m_VideoDlg.Create(IDD_VIDEOVIEW_DLG, this);
Ок
я тут примерчик накидал - посмотри
В OnInitDialog изменяются размеры кнопки.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
USBLexus
Опытный
Offline
Пол:
Кот рыжий
|
|
« Ответ #9 : 04-05-2006 02:40 » |
|
Исходники посмотрел спасибо! Помогли)) Не знаю почему, но заработало Вчера не работала а сегодня работает Странно все это Хм...
|
|
|
Записан
|
#define QUESTION(b) (2*b)||(!(2*b)) (c) William Shakespeare
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #10 : 04-05-2006 08:19 » |
|
Дык не за что. Вчера не работала а сегодня работает
А это всегда так. Ты не знал?
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
|