Собственные окна(с помощью Windows API) в МТ4

 
Может кто-нибудь занимался созданием собственных окон с помощью Windows API в МТ4?
Задача такая: отобразить картинку в определенном месте окна графика.
Создать окно получается, но оно помещается за окном графика, то есть его не видно.
Проблема в отображении этого окна поверх окна графика.
Как это сделать?
Может кто проделывал такое? Подскажите.
 
Для закрепления окна поверх других окон кажется SetWindowPos() используется. Можно еще попробовать BitBlt() - и вляпывать картинку на график. Но только зачем все это надо...
 
SetWindowPos() пробовал, не работает,
также пробовал SetForegroundWindow() тоже не работает.
а вот BitBlt() не пробовал.
Я ещё пробовал что-нить нарисовать в окне графика. Но рисунок удаляется при обновлении окна.
 
Luptator:
SetWindowPos() пробовал, не работает,

Могу предположить, что неправильно пробовал.
 
Предпложение оказалось правильным:))
Забыл основы windows программирования, не зарегистрировал оконный класс.
 
Luptator >>:
Предпложение оказалось правильным:))
Забыл основы windows программирования, не зарегистрировал оконный класс.


скинь плз пример где окно создаешь

 
HINSTANCE h_inst=0;


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
					 )
{
	h_inst=hModule;
	switch(ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
			break;
		case DLL_THREAD_ATTACH:
			break;
		case DLL_PROCESS_DETACH:
			break;
		case DLL_THREAD_DETACH:
			break;
		default:
			break;
	}
	return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	RECT wnd_rect;
	PAINTSTRUCT ps;
	HDC h_dc=0;
	DWORD err_code=0;
	wchar_t err_str[MAX_PATH];
	WCHAR file_path[MAX_PATH];
	GetCurrentDirectory(MAX_PATH,file_path);
	wcscat(file_path,L"\\my_picture.jpg");
	CImage pict;
	HRESULT h_res=pict.Load(file_path);
	h_dc=GetDC(hWnd);

	switch (message)
	{
	case WM_COMMAND:
		break;
	case WM_PAINT:
		if(h_dc!=NULL&&GetWindowRect(hWnd,&wnd_rect)&&h_res==S_OK)
		{
			BeginPaint(hWnd,&ps);
			if(pict.StretchBlt(h_dc,0,0,wnd_rect.right-wnd_rect.left,wnd_rect.bottom-wnd_rect.top,
								  0,0,pict.GetWidth(),pict.GetHeight(),SRCCOPY)==0)
			{
				err_code=GetLastError();
				swprintf(err_str,L"StretchBlt error:%u",err_code);
				MessageBox(NULL,err_str,L"Error",MB_OK);
			}
			ReleaseDC(hWnd,h_dc);
			EndPaint(hWnd,&ps);
		}
		else
		{
			err_code=GetLastError();
			swprintf(err_str,L"Error:%u",err_code);
			MessageBox(NULL,err_str,L"Error",MB_OK);
		}
		
		break;
	case WM_DESTROY:
		DestroyWindow(hWnd);
		break;
	case WM_CLOSE:
		CloseWindow(hWnd);
		break;
	case WM_QUIT:
		DestroyWindow(hWnd);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	pict.Detach();
	return 0;
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX);

	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= 0;
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName	= 0;
	wcex.lpszClassName	= L"_Picture_MT4_";
	wcex.hIconSm		= 0;

	return RegisterClassEx(&wcex);
}



_declspec(dllexport) HWND _stdcall CreatePictWnd(HWND h_chart_wnd)
{
	RECT rect;
	HWND h_wnd=NULL;
	HWND parent_wnd=GetParent(h_chart_wnd);
	parent_wnd=GetParent(parent_wnd);
	parent_wnd=GetParent(parent_wnd);
	if(h_chart_wnd!=NULL&&GetWindowRect(h_chart_wnd,&rect)&&parent_wnd!=NULL
		&&h_inst!=NULL)
	{
		MyRegisterClass(h_inst);
		h_wnd=CreateWindow(L"_Picture_MT4_", L"Picture", WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN,
							rect.left, rect.top,90, 90,parent_wnd, NULL, h_inst, NULL);
		if(h_wnd!=NULL)
		{
			SetWindowPos(h_wnd,HWND_TOP,rect.left+10,rect.top-10,160,160,SWP_SHOWWINDOW);
			ShowWindow(h_wnd, SW_SHOW);
			UpdateWindow(h_wnd);
		}
	}
	return(h_wnd);
}



_declspec(dllexport) BOOL _stdcall DestroyPictWnd(HWND h_wnd)
{
	return(DestroyWindow(h_wnd));
}