0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 4
|
|
1 | |
Перекрывающиеся окна19.11.2012, 22:30. Показов 682. Ответов 2
Метки нет (Все метки)
Добрый вечер. Помогите пожалуйста доделать прогу. Надо создать главное окно и подчиненное, стиль которого OVERLAPPED. Ничего не получается.
#include <afxwin.h> #include <windows.h> class ChildWindow : public CFrameWnd { public: ChildWindow(CFrameWnd*); int PreCreateWindow(CREATESTRUCT& cs); afx_msg void OnLButtonDown1(UINT, CPoint); void OnMouseMove(UINT, CPoint); DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(ChildWindow, CFrameWnd) ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() ChildWindow::ChildWindow(CFrameWnd* parent) { Create(0,0,0,RECT(),parent,0); } class App : public CWinApp { public: App() { ; } int InitInstance(); }; class MainWindow : public CFrameWnd { ChildWindow* Child; public: MainWindow(); afx_msg void OnLButtonDown(UINT, CPoint); DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(MainWindow, CFrameWnd) ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() App theApp; int App::InitInstance() { m_pMainWnd=new MainWindow; m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; } MainWindow::MainWindow() { RECT rect; rect.left = GetSystemMetrics(SM_CXSCREEN) / 8; rect.top = GetSystemMetrics(SM_CYSCREEN) / 4; rect.right = GetSystemMetrics(SM_CXSCREEN) / 8 * 7 ; rect.bottom = GetSystemMetrics(SM_CYSCREEN) / 4 * 3; Create(0,L"Parent",WS_OVERLAPPEDWINDOW, rect); Child = new ChildWindow (this); SetClassLong(Child->GetSafeHwnd(), GCL_HBRBACKGROUND, (LONG)CreateSolidBrush(RGB(80,250,80))); SetClassLong(Child->GetSafeHwnd(), GCL_HICON, (LONG)LoadIcon(0, IDI_SHIELD)); Child->ShowWindow(SW_SHOW); Child->UpdateWindow(); } int ChildWindow::PreCreateWindow(CREATESTRUCT& cs) { cs.cy = ::GetSystemMetrics(SM_CYSCREEN) /4; cs.cx = ::GetSystemMetrics(SM_CXSCREEN) /8; cs.x = 0; cs.y = 0 ; cs.style = WS_OVERLAPPED | WS_CAPTION | WS_CLIPSIBLINGS; cs.lpszName = L"WS_OVERLAPPED | WS_CAPTION | WS_CLIPSIBLINGS"; return CFrameWnd::PreCreateWindow(cs); } void MainWindow::OnLButtonDown(UINT nFlags, CPoint point) { AfxMessageBox(L"Стиль основного окна:\n\nWS_OVERLAPPEDWINDOW", MB_OK); } void ChildWindow::OnLButtonDown1(UINT nFlags, CPoint point) { AfxMessageBox(L"Стиль дочернего окна:\n\nWS_OVERLAPPED", MB_OK); } void ChildWindow::OnMouseMove(UINT nFlags, CPoint point) { static HCURSOR cursor = LoadCursor(0, IDC_NO); if( (DWORD)cursor != GetClassLong(this->GetSafeHwnd(), GCL_HCURSOR) ) { SetClassLong(this->GetSafeHwnd(), GCL_HCURSOR, (LONG)cursor); } }
0
|
19.11.2012, 22:30 | |
Ответы с готовыми решениями:
2
поиск Handle окна, зная ControlId окна Зависимость размера окна диалога от окна фрейма Как присвоить переменную одного диалогового окна к переменной другого диалогового окна? (ООП) Предотвратить сворачивание окна по нажатию кнопки Windows «Свернуть все окна» |
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,519
|
|
20.11.2012, 08:20 | 2 |
Видимым кто делать будет?
я ни WS_VISIBLE ни ShowWindow не нашел код обрамляй тегами С++ неудобно читать Создавать окно в конструкторе плохая идея, как думаешь зачем разделили конструктор и метод Create?
0
|
0 / 0 / 0
Регистрация: 18.04.2012
Сообщений: 4
|
|
20.11.2012, 17:45 [ТС] | 3 |
ShowWindow там есть. А WS_VISIBLE в данном случае не обязателен. Если скомпилировать, то в программе появляется два окна. И мы их видим) В конструкторе главного окна создается подчиненное окно, без этого как я понимаю, и как нам объясняли никак. А вв конструкторе подчиненного создается окно-точка, которое потом переопределяется.
0
|
20.11.2012, 17:45 | |
20.11.2012, 17:45 | |
Помогаю со студенческими работами здесь
3
TChromium и onBeforePopup: как блокировать новые окна, но разрешать окна с сообщениями? Удержание окна с текущими введенными значениями после диалогового окна (с предупреждением) Получить цвет пикселя из неактивного окна, перекрытого другими окнами окна Узнать имя окна в фокусе (текущего окна) через X11lib Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |