Hi,
I'd like to launch the page setup dialog to directly modify properties for a particlar download. I tried the following code:
((AcApLayoutManager *)acdbHostApplicationServices()->layoutManager())->pageSetup(...);
It launches the dialog "Page Setup Manager" and it is necessary to click on button "Modify" to show page setup dialog. How to get rid of this click and directly show the second dialog?
Regards,
Jonathan
Solved! Go to Solution.
Solved by Alexander.Rivilis. Go to Solution.
I don't think it's possible - Isn't it just a case of using acedCommand() with the PLOT command?
It is look like possible only with Windows hook.
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Thank you for your answer. I don't understand how to use such a hook. Your idea is to manually simulate click on Modify button?
Yes. Simple sample without any error checking and adopted for English and Russian localization of AutoCAD:
HHOOK hMsgBoxHook = NULL; LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) { HWND hwnd; HWND hwndButton; if(nCode < 0) return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam); switch(nCode) { case HCBT_CREATEWND: { // Get handle to the message box! hwnd = (HWND)wParam; break; } case HCBT_ACTIVATE: { // Get handle to the message box! hwnd = (HWND)wParam; HWND hwndfirst = GetNextDlgTabItem(hwnd,NULL,FALSE); hwndButton = hwndfirst; do { CWnd *w = CWnd::FromHandle(hwndButton); CString name; if (w && w->IsKindOf(RUNTIME_CLASS(CButton))) { w->GetWindowText(name); // Name of button can be localized if (name == _T("&Modify...") || name == _T("&Редактировать...")) { UnhookWindowsHookEx(hMsgBoxHook); hMsgBoxHook = NULL; w->SendMessage(WM_LBUTTONDOWN,0,0); w->SendMessage(WM_LBUTTONUP,0,0); break; } } } while ((hwndButton = GetNextDlgTabItem(hwnd,hwndButton,FALSE)) != NULL && hwndButton != hwndfirst); } } return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam); } static void ArxPageSetup(void) { AcApLayoutManager *pLayMan = reinterpret_cast<AcApLayoutManager *>(acdbHostApplicationServices()->layoutManager()); AcDbObjectId idlay = pLayMan->getActiveLayoutBTRId(); hMsgBoxHook = ::SetWindowsHookEx(WH_CBT,CBTProc,NULL,GetCurrentThreadId()); pLayMan->pageSetup(idlay,NULL,TRUE); if (hMsgBoxHook != NULL) UnhookWindowsHookEx(hMsgBoxHook); }
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Another hook-function. Does not depend on the localization AutoCAD. Take it "as is", without any guarantees. 🙂
// AutoCAD 2008...2013 has identical IDMODIFY number #define IDMODIFY (4705) HHOOK hMsgBoxHook = NULL; LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) { HWND hwnd; HWND hwndButton; if(nCode < 0) return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam); switch(nCode) { case HCBT_CREATEWND: { // Get handle to the message box! hwnd = (HWND)wParam; break; } case HCBT_ACTIVATE: { // Get handle to the message box! hwnd = (HWND)wParam; hwndButton = GetDlgItem(hwnd, IDMODIFY); if (hwndButton != NULL) { ::UnhookWindowsHookEx(hMsgBoxHook); hMsgBoxHook = NULL; ::SendMessage(hwndButton,WM_LBUTTONDOWN,0,0); ::SendMessage(hwndButton,WM_LBUTTONUP,0,0); } } } return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam); }
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Your solution works like a charm. But I don't know if I will implement it in release version of my software, because it's not the most proper code.
Regards,
Jonathan
@maisoui wrote:
Your solution works like a charm. But I don't know if I will implement it in release version of my software, because it's not the most proper code.
Regards,
Jonathan
... but look like there is no another solution (not using hooks)...
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn