Для закрепления окна поверх других окон кажется SetWindowPos() используется.
Можно еще попробовать BitBlt() - и вляпывать картинку на график.
Но только зачем все это надо...
SetWindowPos() пробовал, не работает,
также пробовал SetForegroundWindow() тоже не работает.
а вот BitBlt() не пробовал.
Я ещё пробовал что-нить нарисовать в окне графика. Но рисунок удаляется при обновлении окна.
также пробовал SetForegroundWindow() тоже не работает.
а вот BitBlt() не пробовал.
Я ещё пробовал что-нить нарисовать в окне графика. Но рисунок удаляется при обновлении окна.
Luptator:
SetWindowPos() пробовал, не работает,
Могу предположить, что неправильно пробовал.
SetWindowPos() пробовал, не работает,
Предпложение оказалось правильным:))
Забыл основы windows программирования, не зарегистрировал оконный класс.
Забыл основы 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)); }
А тут еще есть
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Задача такая: отобразить картинку в определенном месте окна графика.
Создать окно получается, но оно помещается за окном графика, то есть его не видно.
Проблема в отображении этого окна поверх окна графика.
Как это сделать?
Может кто проделывал такое? Подскажите.