Я обновляю некоторое старое программное обеспечение, которое не работает на Win7 или более поздней версии. поэтому я перестраиваю некоторые библиотеки MFC, которые используют последние версии win32.Файл Диалог не обновляется, если CFrameWnd не скрыт
Теперь у меня есть два вопроса: появляется
- MessageBox за CFrameWnd поэтому он не может получить доступ к отправке заявки остановиться.
- Открытое диалоговое окно (на основе CFileDialog или IFileDilog) не обновляется при изменении типа файла.
Однако обе проблемы решены, если CFrameWnd скрыт. или, в случае MessageBox, вам не нужно будет скрывать окно, если вы пишете: PostMessage (0x118); на самом деле я не знаю почему.
Должно быть, что-то мне не хватает здесь.
У меня также есть другая проблема при использовании класса OpenFileDialog, который наследуется от IFileDialog. при закрытии этого диалога, не поднимая файл, приложение вылетает.
//--targetver.h
#pragma once
#include <sdkddkver.h>
//--stdafx.h:
#ifndef CS_EXTRALEAN
#define CS_EXTRALEAN
#endif
#pragma once
#include "targetver.h"
#include<afxwin.h>
#include<afxext.h>
#include<afxcmn.h>
//--stdafx.cpp
#include "stdafx.h"
//--CMainWnd.h
#pragma once
class CMainWnd : public CFrameWnd
{
public:
CMainWnd();
~CMainWnd();
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT, CPoint);
DECLARE_MESSAGE_MAP()
};
//--CMainWnd.cpp
#include "stdafx.h"
#include"CMainWnd.h"
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
CMainWnd::CMainWnd()
: CFrameWnd()
{
CString class_name = AfxRegisterWndClass(
CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS,
AfxGetApp()->LoadStandardCursor(IDC_ARROW),
(HBRUSH)::GetStockObject(BLACK_BRUSH),
AfxGetApp()->LoadStandardIcon(IDI_ASTERISK));
HRESULT hResult = this->Create(
class_name,
L"This is CMainWnd",
WS_OVERLAPPEDWINDOW,
this->rectDefault,
NULL,
NULL,
0,
NULL);
}
CMainWnd::~CMainWnd() { }
void CMainWnd::OnPaint()
{ }
void CMainWnd::OnLButtonDown(UINT, CPoint)
{
MessageBox(L"HELLO MFC", L"MFC", MB_OK);
}
//--CAppWnd.h
#pragma once
class CAppWnd : public CWinApp
{
public:
CAppWnd();
~CAppWnd();
BOOL InitInstance();
DECLARE_MESSAGE_MAP()
};
//--CAppWnd.cpp
#include "stdafx.h"
#include "CAppWnd.h"
#include "CMainWnd.h"
BEGIN_MESSAGE_MAP(CAppWnd, CWinApp)
END_MESSAGE_MAP()
CAppWnd::CAppWnd()
:CWinApp()
{ }
CAppWnd::~CAppWnd()
{ }
BOOL CAppWnd::InitInstance()
{
this->m_pMainWnd = new CMainWnd;
this->m_pMainWnd->ShowWindow(m_nCmdShow);
return CWinApp::InitInstance();
}
CAppWnd The_App;
C++ давно, но можете ли вы не дать владельцу свой MessageBox, который бы всегда отображался поверх этого владельца? – GuidoG
Я пробовал не работать. должно быть что-то не так с моим кодом, что я не замечаю. – basjak
чем копировать этот код здесь не все собираются скачать ваши источники и искать его – GuidoG