Microsoft KB Archive/250365

= The system menu gets corrupted when a file is dropped onto a MFC MDI application in Print Preview mode =

Article ID: 250365

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 6.0 Enterprise Edition

 Microsoft Visual C++ 6.0 Professional Edition

 Microsoft Visual C++ 6.0 Standard Edition

 Microsoft Windows XP Professional</li></ul>

 Microsoft Windows XP Home Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q250365

<div class="symptoms_section">

SYMPTOMS
When you try to open a file from Windows Explorer or use a drag-and-drop operation to move the file while the file's associated MFC MDI application is in Print Preview mode, one of the following symptoms are observed:
 * If the child window for which Print Preview is being shown is not maximized then the menu for the new child window is created on the top of the Print Preview window.
 * If the MDI child window is maximized and in Print Preview mode then the two sets of the system menu and the Minimize/Maximize/Close buttons are seen.

<div class="cause_section">

CAUSE
The application is supposed to close the print preview window and switch to the MDI child window that was created for opening this file. But the application is not able to switch to the associated view.

<div class="resolution_section">

RESOLUTION
One way to work around this problem is to close the Print Preview window before creating a new window for the file being opened or dropped. The following code shows how this can be done:   Add the following line of code to the Stdafx.h file:  Create a handler for the WM_DROPFILES message in your CMainFrame class and copy the following code in there. void CMainFrame::OnDropFiles(HDROP hDropInfo) {   CView* pView = GetActiveView; if (pView && pView->IsKindOf(RUNTIME_CLASS(CPreviewView))) {       CPreviewView* pView = (CPreviewView *)GetActiveView; SendMessage(WM_COMMAND, AFX_ID_PREVIEW_CLOSE); }
 * 1) include <afxpriv.h> </li>

CMDIFrameWnd::OnDropFiles(hDropInfo); }                   </li>  Override the OnDDECommand virtual function in your application class and copy the following code there: BOOL CQ250365App::OnDDECommand(LPTSTR lpszCommand) {   CMainFrame* pFrame = (CMainFrame *)AfxGetMainWnd; CView* pView = pFrame->GetActiveView; if (pView && pView->IsKindOf(RUNTIME_CLASS(CPreviewView))) {       CPreviewView* pView = (CPreviewView *)pFrame->GetActiveView; pFrame->SendMessage(WM_COMMAND, AFX_ID_PREVIEW_CLOSE); }   return CWinApp::OnDDECommand(lpszCommand); }                   </li></ul>

<div class="status_section">

STATUS
Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

<div class="moreinformation_section">

MORE INFORMATION
The WM_DROPFILES message is sent when the user drops a file on the window of an application that has registered itself as a recipient of dropped files.

The CWinApp::OnDDECommand method is called by the framework when the main frame window receives a DDE execute message. The default implementation checks whether the command is a request to open a document and, if so, then opens the specified document. The Windows File Manager usually sends such DDE command strings when the user double-clicks a data file.

Steps to Reproduce Behavior

 * 1) Run AppWizard to create an MFC AppWizard (exe).
 * 2) Generate an MFC AppWizard (exe) as MDI type.
 * 3) At step 4 of 6, click Advanced set a file extension in the Advanced Options dialog box to .xxx. The rest of the selections can be default.
 * 4) Build and run the application.
 * 5) Save the document as Test.xxx (where .xxx is a file extension).
 * 6) Close the application and run it again.
 * 7) Maximize the MDI child window and select Print Preview from the menu.
 * 8) Drag the test file from explorer into the application or double-click the file to open it.
 * 9) You should see two sets of system menus and Minimize/Maximize/Close buttons.
 * 10) If you do the above tests with the child window in a normal state (not maximized), you should see a menu on top of print preview window.

<div class="references_section">