Всем добрый вечер. Мне надо сделать скриншот диалоговых окон которое создается. Окна берутся из .dll. Сейчас скриншот делаеться в ответ на сообщение WM_COMMAND (IDOK, IDCANCEL). Как сделать так чтобы не надо было нажимать ни на какие кнопки, а диалоги сами открывались фотались и закрывались??? Есть какое-то сообщение сразу после создания окна. К примеру как WM_INITDIALOG ( он не подходит потому что при его вызове окно еще не отображаеться и фоткать собственно нечего). Вот кусок кода:
| Код |
void CDlgSearchDlg::OnBnClickedOk() { HMODULE hDll; hDll = LoadLibraryW(L"D:\\Handmade\\C++\\SCAD\\dll_dlg\\DlgSearch\\scdlg0.dll"); if(hDll==NULL) { MessageBoxW(L"Dll не найдена"); } //EnumResourceNames(hDll,RT_DIALOG,(ENUMRESNAMEPROC)DlgFind,0); if(!EnumResourceNames(hDll,RT_DIALOG,(ENUMRESNAMEPROC)DlgFind,0)) { MessageBoxW(L"ошибка поиска диалогов"); } OnOK(); }
BOOL DlgFind(HMODULE hModule,LPCTSTR lpszType,LPTSTR lpszName,LONG_PTR lParam) { lpszDialogName=lpszName; INT_PTR hnDlg; hnDlg=DialogBoxW(hModule,lpszName,NULL,(DLGPROC)DlgCopy); return TRUE; }
INT_PTR DlgCopy(HWND hwndDlg,UINT message,WPARAM wParam,LPARAM lParam) { size_t MaxX=400,MaxY=400; HDC hdcDialog = GetWindowDC(hwndDlg); switch (message) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: SaveDlg(hwndDlg); EndDialog(hwndDlg, wParam); return TRUE; case IDCANCEL: SaveDlg(hwndDlg); EndDialog(hwndDlg, wParam); return TRUE; } } //EndDialog(hwndDlg, wParam); return FALSE;
}
|
SaveDlg(hwndDlg) изображения сохраняет, проверено. |