Ik heb volgend probleem: als ik onderstaande c++ programmaatje laat lopen, krijg ik op vista de foutmelding dat het progje niet meer werkt eens er drie WM_COPYDATA's naar verstuurd zijn. Op XP sluit het prog gewoon af als er een 2de WM_COPYDATA naartoe gestuurd wordt.
Iemand een idee om dit op te lossen?
Bedankt al!
Iemand een idee om dit op te lossen?
Code:
#include <windows.h>
LRESULT CALLBACK WindowProcedure(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam);
class MyWindow {
public:
MyWindow(WNDPROC winProc, char const * className, HINSTANCE hInst);
void Register() {
::RegisterClass(&_class);
}
private:
WNDCLASS _class;
};
MyWindow::MyWindow(WNDPROC winProc, char const * className, HINSTANCE hInst) {
_class.style = 0;
_class.lpfnWndProc = winProc;
_class.cbClsExtra = 0;
_class.cbWndExtra = 0;
_class.hInstance = hInst;
_class.hIcon = 0;
_class.hCursor = 0;
_class.hbrBackground = 0;
_class.lpszMenuName = 0;
_class.lpszClassName = className;
}
class WindowCreator {
public:
WindowCreator() : _hwnd(0) {}
WindowCreator(char const * caption, char const * className, HINSTANCE hInstance);
protected:
HWND _hwnd;
};
WindowCreator::WindowCreator(char const * caption, char const * className, HINSTANCE hInstance) {
_hwnd = ::CreateWindow(
className,
caption,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
0,
0,
hInstance,
0);
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char * cmdParam, int cmdShow) {
char className[] = "MsnMsgrUIManager";
MSG msg;
int status;
MyWindow myWindow(WindowProcedure, className, hInst);
myWindow.Register();
WindowCreator window("VirtualDJ Now Playing Handler", className, hInst);
while(::GetMessage(&msg, 0, 0, 0) != 0) {
::DispatchMessage(&msg);
}
}
LRESULT CALLBACK WindowProcedure(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam) {
switch(message) {
case WM_COPYDATA:
COPYDATASTRUCT *vdjData = (COPYDATASTRUCT *) lParam;
if(vdjData->dwData == 0x547){
char* vdjString = new char;
wchar_t *vdjCode = (wchar_t *) vdjData->lpData;
wcstombs(vdjString,vdjCode,vdjData->cbData);
MessageBox(NULL, vdjString, "<Message title here>", MB_ICONSTOP|MB_SETFOREGROUND);
}
}
}
Bedankt al!