Article: Q121330
Product(s): Microsoft Windows Software Development Kit
Version(s): WINDOWS:1.1,3.1
Operating System(s):
Keyword(s): kbmmkbbuglist
Last Modified: 06-NOV-1999
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Windows Software Development Kit (SDK) 3.1
- Microsoft Video for Windows, version 1.1
-------------------------------------------------------------------------------
SYMPTOMS
========
An MCIWndClass popup window realizes its logical palette in the foreground
instead of the background as requested in a call to MCIWndRealize() with the
fBkgnd flag set to TRUE. The foreground palette realization is seen as a flash.
The following code demonstrates the setting that results in the flash. The flash
occurs when the popup window receives the input focus from another application
using a different logical palette.
hwndPanel = MCIWndCreate(hwndParent, hInst,
MCIWNDF_NOAUTOSIZEMOVIE | MCIWNDF_NOMENU |
WS_OVERLAPPED | WS_BORDER | WS_CAPTION |
WS_SYSMENU | WS_POPUP, NULL);
MCIWndOpen(hwndPanel, fname, 0);
MCIWndRealize(hwndPanel, TRUE);
SetWindowPos(hwndPanel, HWND_TOP, X, Y, 0, 0,
SWP_NOSIZE | SWP_DRAWFRAME | SWP_SHOWWINDOW);
MCIWndPlay(hwndPanel);
CAUSE
=====
When the MCIWndClass popup window receives the input focus from another
application that uses a different logical palette, the popup window receives a
WM_QUERYNEWPALETTE message that is processed for the popup window by the
MCIWndProc() procedure. In the MCIWndProc() procedure, the "case
WM_QUERYNEWPALETTE:" results in a call to MCIWndRealize() with the flag fBkgnd
set to FALSE. This occurs even if the popup window's palette was originally
realized in the background.
STATUS
======
Microsoft has confirmed this to be a bug in Microsoft Video for Windows Version
1.1. We are researching this problem and will post new information as it becomes
available in the Microsoft Knowledge Base.
MORE INFORMATION
================
The problem described in the SYMPTOMS section occurs only with popup windows. It
does not arise when the window style is WS_CHILD. When the window is a child
window, the WM_QUERYNEWPALETTE messages are processed by the parent window's
callback procedure instead of the MCIWndProc() procedure.
When the window involved is a popup window, you can avoid the flash by
subclassing the MCIWndProc() procedure and allowing the subclassing application
to process the WM_QUERYNEWPALETTE message directly by calling MCIWndRealize()
with the fBkgnd flag set to TRUE. The following code demonstrates this
workaround:
// MakeProcInstance() is called once in a convenient place such
// as the application's InitInstance() procedure. RealizeProc()
// is the procedure that subclasses MCIWndProc(). RealizeProc()
// will process WM_QUERYNEWPALETTE messages on behalf of
// MCIWndProc(). In the Module Definition File, list the
// RealizeProc() procedure under EXPORTS.
lpfnRealizeProc = MakeProcInstance((FARPROC)
RealizeProc, hinstCurrent);
// In the application's MainWndProc() under "case WM_DESTROY:",
// call FreeProcInstance().
FreeProcInstance(lpfnRealizeProc);
// Add the next two function calls to the code shown in the
// Symptoms section just after the call to MCIWndCreate(). The
// GetWindowLong() call returns a pointer to the popup window's
// original window procedure, namely MCIWndProc(). The
// SetWindowLong() procedure specifies that the RealizeProc()
// procedure is the new window procedure for the popup window.
lpfnOldRealizeProc = (FARPROC)GetWindowLong(hwndPanel,
GWL_WNDPROC);
SetWindowLong(hwndPanel, GWL_WNDPROC, (LONG)
lpfnRealizeProc);
// The following procedure subclasses MCIWndProc(). It processes
// the WM_QUERYNEWPALETTE messages. All other messages
// are sent to MCIWndProc(), which is pointed to by the
// parameter lpfnOldRealizeProc.
long FAR PASCAL RealizeProc(HWND hwndPanel, UINT message, WPARAM
wParam, LPARAM lParam)
{
switch (message)
{
case WM_QUERYNEWPALETTE:
return (MCIWndRealize(hwndPanel, TRUE));
default:
return (CallWindowProc((WNDPROC)lpfnOldRealizeProc,
hwndPanel, message, wParam, lParam));
}
}
Additional query words: 3.10 1.10 mci buglist3.10 buglist1.10
======================================================================
Keywords : kbmm kbbuglist
Technology : kbAudDeveloper kbWin3xSearch kbVideoSearch kbSDKSearch kbWinSDKSearch kbWinSDK310 kbVideo110
Version : WINDOWS:1.1,3.1
=============================================================================