LRESULT CALLBACK CPropertyPopupWindow::_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    CPropertyPopupWindow *_this;
    COPYDATASTRUCT* cds;
  
    _this = _GetThis(hwnd);
	int ime_stop_composition = RegisterWindowMessage("WM_OVD_STOP_COMPOSITION");

	if (uMsg == ime_stop_composition) {
		OutputDebugString("new WM_OVD_STOP_COMPOSITION message");
		_this->_pService->stopComposition();
		return 0;
	}

    switch (uMsg)
    {
        case WM_CREATE:
            _SetThis(hwnd, lParam);
            return 0;

        case WM_COPYDATA:
            cds = (COPYDATASTRUCT*) lParam;
            OutputDebugString("New data");
            _this->_pService->setComposition(cds->lpData, cds->cbData);
            break;

        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}
LRESULT CALLBACK CExtentVisualWindow::_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    CExtentVisualWindow *_this;
    HDC hdc;
    PAINTSTRUCT ps;
  
    _this = _GetThis(hwnd);

    switch (uMsg)
    {
        case WM_CREATE:
            _SetThis(hwnd, lParam);
            return 0;

        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            if (_this)
                _this->OnPaint(hwnd, hdc);
            EndPaint(hwnd, &ps);
            break;

        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}