2025-11-28 00:35:46 +09:00

117 lines
3.2 KiB
C++

//////////////////////////////////////////////////////////////////////
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED
// TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (C) 2008 Microsoft Corporation. All rights reserved.
//
// CWMFExReceiver.cpp
//
// Using the ChangeWindowMessageFilterEx function to demonstrate its capabilities.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "..\Include\CWMFExTest.h"
#define MSGFLTINFO_ERROR (-1)
DWORD ChangeFilter(HWND hwnd, UINT uMsg, DWORD dwMsgFlt)
{
BOOL fSuccess = FALSE;
DWORD dwMsgFltInfo = MSGFLTINFO_NONE;
CHANGEFILTERSTRUCT ChangeFilterStruct;
ChangeFilterStruct.cbSize = sizeof(CHANGEFILTERSTRUCT);
fSuccess = ChangeWindowMessageFilterEx(hwnd, uMsg, dwMsgFlt, &ChangeFilterStruct);
dwMsgFltInfo = ChangeFilterStruct.ExtStatus;
if (!fSuccess) {
wprintf(L"\nChangeWindowMessageFilterEx failed with %lu", GetLastError());
dwMsgFltInfo = MSGFLTINFO_ERROR;
}
return dwMsgFltInfo;
}
LRESULT CALLBACK CWMFExWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg) {
case CWMFEX_CONTROL:
return ChangeFilter(hwnd, (UINT)lParam, (DWORD)wParam);
case WM_CLOSE:
PostQuitMessage(0);
break;
default:
break;
}
DefWindowProc(hwnd, uMsg, wParam, lParam);
return CWMFEX_ACK;
}
HWND CreateTheWindow(HINSTANCE hInstance)
{
WNDCLASS wndclass;
HWND hwnd = NULL;
ZeroMemory(&wndclass, sizeof(WNDCLASS));
wndclass.lpfnWndProc = CWMFExWindowProc;
wndclass.hInstance = hInstance;
wndclass.lpszClassName = WNDCLASSNAME;
wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;
if (0 == RegisterClass(&wndclass)) {
wprintf(L"\nRegisterClass failed with %lu", GetLastError());
return NULL;
}
hwnd = CreateWindow(WNDCLASSNAME,
WNDCLASSNAME,
WS_BORDER | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
500,
500,
NULL,
NULL,
hInstance,
NULL);
if (hwnd == NULL) {
wprintf(L"\nCreateWindow failed with %lu", GetLastError());
}
return hwnd;
}
int __cdecl wmain (
int argc,
wchar_t *argv[])
{
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
HWND hwnd = NULL;
MSG msg;
hwnd = CreateTheWindow(GetModuleHandle(NULL));
if (hwnd == NULL) {
return 0;
}
// Allow control message CWMFEX_CONTROL so that sender can control this window
if (MSGFLTINFO_ERROR == ChangeFilter(hwnd, CWMFEX_CONTROL, MSGFLT_ALLOW)) {
DestroyWindow(hwnd);
return 0;
}
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}