ObjectARX
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

How to display page setup dialog?

7 REPLIES 7
SOLVED
Reply
Message 1 of 8
maisoui
853 Views, 7 Replies

How to display page setup dialog?

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

 

--
Jonathan
7 REPLIES 7
Message 2 of 8
fenton.webb
in reply to: maisoui

I don't think it's possible - Isn't it just a case of using acedCommand() with the PLOT command?




Fenton Webb
AutoCAD Engineering
Autodesk

Message 3 of 8
Alexander.Rivilis
in reply to: maisoui

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
Expert Elite Member

Message 4 of 8
maisoui
in reply to: Alexander.Rivilis

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?

--
Jonathan
Message 5 of 8
Alexander.Rivilis
in reply to: maisoui

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
Expert Elite Member

Message 6 of 8

Another hook-function. Does not depend on the localization AutoCADTake 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
Expert Elite Member

Message 7 of 8
maisoui
in reply to: Alexander.Rivilis

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. Smiley Happy

 

Regards,

Jonathan

 

--
Jonathan
Message 8 of 8
Alexander.Rivilis
in reply to: maisoui


@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. Smiley Happy

 

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
Expert Elite Member

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report

”Boost