|
I am able to get Adobe Acrobat working inside a java JInternalFrame.
However, most of our users don't have a license nor need for Acrobat.
I am trying to get the Adobe Reader ActiveX control to work in java.
I created the "MFC from ActiveX" using the "Adobe PDF Reader <1.0>" control and it is called CAcroAXDocShim by default.
So I create:
CAcroAXDocShim *shim = new CAcroAXDocShim();
I have tried this:
Embed ActiveX controls inside Java GUI[^]
However, hwndChild is always returned as NULL.
It seems like the real problem is the java window which was returned by the JAWT_Win32DrawingSurfaceInfo does not have the ActiveX/OLE controls initialized.
So I tried this:
shim->SubclassWindow( dsi_win->hwnd )
That still fails.
I have also tried this:
Adobe ActiveX Control with MFC[^]
However, I have to render the ActiveX control within an existing java awt component (i.e. an existing HWND). It unfortunately can't create a new Frame.
Is there any way to initialize the HWND returned by the native java awt libraries with ActiveX/OLE support?
Or... better yet... anyone know how to get an ActiveX control like Adobe Reader to display in java?
(perhaps I'm overlooking something; any guidance/comments would be appriciated.)
modified on Wednesday, May 20, 2009 4:00 PM
|
|
|
|
|
|
I think we looked at this before.
1) it isn't maintained by adobe.
2) it hasn't been updated since 1999
3) does it support flash within the pdf?... I'm checking on this now.
4) we'd like for the users to be able to update their Adobe Reader and have the new features available to them.
I'm going to try it and see if it meets or needs or not.
|
|
|
|
|
|
I haven't seen the SWT article.
I will give that a try.
|
|
|
|
|
No, the app is a large swing app and it doesn't look like it's possible to mix SWT and Swing/AWT.
I am currently retrying Embed ActiveX controls inside Java GUI[^]
I had to change
HWND hwndChild = ::CreateWindow(...)
to
CAxWindow* caxw = new CAxWindow( pThreadParam->hwnd );
HWND hwndChild = caxw->Create( pThreadParam->hwnd );
.
However the call to Create(...) fails.
In the debugger it is failing in atlwin.h at ATLASSUME(m_hWnd == NULL); .
The message says "Debug Assertion Failed!"..."Expression: m_hWnd == 0".
But... the pThreadParam->hwnd that is passed in is not null according to the debugger and the printf output.
Any ideas?
|
|
|
|
|
This looks promising (using the javacom example):
CAxWindow* caxw = new CAxWindow( pThreadParam->hwnd );
HRESULT rslt = caxw->CreateControl( L"c:\\test.pdf" );
... and commenting out the rest of the code.
But, it appears to be taking up all of the window area such that I can't resize nor minimize it.
|
|
|
|
|
It's opening in a separate window for some reason.
I can't get it to open inside the parent window.
Any ideas?
|
|
|
|
|
#3 -> no, it doesn't support flash, so I wouldn't expect it to keep up with future pdf standards.
I tested using "viewing the Adobe Acrobat 7.0 interactive tour"[^] from Adobe's website (referenced in Adobe - Reader : New Features[^].
The pdf looks similar to what Reader and Acrobat display, but the "new features" are not available and I get an "UnknownFilterException" when I attempt to resize.
If I scroll to the bottom I get an "unsupported command" error.
We would much rather get whatever version of Adobe Reader they have installed and have it displayed in the window instead.
So... does anyone know how I can use the HWND from the awt jni to display Adobe Reader?
It appears that the missing piece so far is getting the ActiveX/OLE initialized in the parent window (the HWND of the java awt component we're trying to get Reader to draw in).
|
|
|
|
|
I can't find the bug in this small code fragment.
I copied it straight from the book. It's probably 1 error causing a bunch of error message.
#include "stdafx.h"
#include <iostream>
#include <string>
#include "stdafx.h"
using namespace std;
const int MAX = 3;
struct Person{
string name;
int height;
};
int _tmain(int argc, _TCHAR* argv[])
{
Person p[MAX];
for (int x = 0; x < MAX; x++)
{
cout << "Enter person's name: ";
getline(cin, p[x].name);
cout << "Enter height in inches: ";
cin >> p[x].height;
cin.ignore();
}
cout << "Outputting person data\n";
cout << "======================\n";
for (x = 0; x < MAX; x++)
cout << "Person #" << x + 1 << "'s name is "
<< p[x].name << " and height is ";
<< p[x].height << endl;
return 0;
}
|
|
|
|
|
- Please quote your code properly - firstly, select the "Encode HTML tags when pasting" option below the text box and paste your code in, and secondly, please enclose it in <PRE> tags, to display it in a monospaced font.
- Try telling us at least some of the error messages
Also - that second #include "stdafx.h" looks wrong. If you're using precompiled headers, the second stdafx.h will cause the compiler and pre-processor to ignore all the #include statements that occur before the #include "stdafx.h"
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
modified on Wednesday, May 20, 2009 11:12 AM
|
|
|
|
|
there's a ";" that should not be there at the end of this line :
<< p[x].name << " and height is ";
This signature was proudly tested on animals.
|
|
|
|
|
jonathan warfield wrote: It's probably 1 error causing a bunch of error message.
Such as?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
jonathan warfield wrote: for (x = 0; x < MAX; x++)
for visual C++ 2003 onwards, variables defined inside for loopswill not be available outside. either you've to make int x declaration just before the for loop or for teh second for loop define as
for (int x = 0; x < MAX; x++)
jonathan warfield wrote: << p[x].name << " and height is ";
<< p[x].height << endl;
Please remove the unnecessary semi column at the end of first statement.
Anywayz start reading your favorite C++ Book
-Sarath.
"Great hopes make everything great possible" - Benjamin Franklin
|
|
|
|
|
I am trying to understand something about MFC and resource files. By resource files, I mean files that end with the extension .rc. As I understand it, resource files can be used to create Menus and add short cuts. Please consider the following resource file:
<br />
IDR_MAINFRAME MENU<br />
{<br />
POPUP "&Output Options" {<br />
MENUITEM "&Create one", IDM_CREATE1<br />
MENUITEM "create two", IDM_CREATE2<br />
MENUITEM "create one", IDM_CREATE3<br />
}<br />
<br />
}<br />
<br />
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE<br />
BEGIN<br />
"C", IDM_CREATE1, VIRTKEY, CONTROL<br />
END<br />
Observe that the string “Create one” is prefixed by an &. The way I read the documentation (I am looking at the book Programming Window by Charles Petzold) the & is suppose to result in the C in Create being underlined. The fact that it is underlined will be a clue to the user that a short cut exists for that menu item. However, the character C is not being underlined. I am wondering what I am missing.
Important note: The book I mentioned above talks about C and developing code using the Windows SDK. The code I am writing is in C++ and it uses MFC. I am thinking that MFC is turning off the underline character.
Thanks
Bob
|
|
|
|
|
On Windows 2000 and up, the default behavior of underlining is a configuration option. Normally, they won't show underlining until you press the "alt" key.
|
|
|
|
|
Bob,
Thanks for the response. Is there way to set it up so that they show up by default? If so, please tell me how.
Thanks
Bob
|
|
|
|
|
It's usually in the display properties applet (right click on desktop and choose "Properties".
In Windows 2000, select the "Effects" tab and the configuration option is there.
In Windows XP, select the "Appearance" tab and then press the "Effects..." button to bring up the effects dialog. The configuration option is there.
|
|
|
|
|
Try pressing ALT? IIRC, Windows doesn't display the underlines until you press ALT.
Anyway - here's part of the menu code of an MFC SDI project with a classic menubar (selected on the User Interface Features pane of the MFC application wizard). It displays underlines correctly.
IDR_MAINFRAME MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New\tCtrl+N", ID_FILE_NEW
MENUITEM "&Open...\tCtrl+O", ID_FILE_OPEN
MENUITEM "&Save\tCtrl+S", ID_FILE_SAVE
MENUITEM "Save &As...", ID_FILE_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "&Print...\tCtrl+P", ID_FILE_PRINT
MENUITEM "Print Pre&view", ID_FILE_PRINT_PREVIEW
MENUITEM "P&rint Setup...", ID_FILE_PRINT_SETUP
MENUITEM SEPARATOR
MENUITEM "Recent File", ID_FILE_MRU_FILE1,GRAYED
MENUITEM SEPARATOR
MENUITEM "E&xit", ID_APP_EXIT
END
However, with VS2008, there is a second option for menus, which is "Use a menu bar and toolbar". This uses the menubar that comes with the "MFC Feature Pack" (it's a CMFCMenuBar[^]). This menubar doesn't appear to display underlines on the menubar (but does on the menu popups).
I hope this information clears up your issue...
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Staurt,
Thanks for the response. When I press the ALT key it works. However, when I run Microsoft Word,
I see that there are Menu items that are underlined without pressing ALT key. In Word they remain underlined even if I press the ALT key again. I would like the user to be able to see the underline without pressing the ALT key. Maybe I need to send the ALT key to the program. Please comment.
Thanks
Bob
|
|
|
|
|
BobInNJ wrote: I would like the user to be able to see the underline without pressing the ALT key.
Even though they may have Windows configured to do otherwise?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
David,
Thanks for the response. I am not sure how to answer your question. I know that when I run MS Word it comes up underlined. On the same system, when I run my program it does not until the user
hits the ALT key. I would like my program to be like MS Word. What should I do?
Bob
|
|
|
|
|
BobInNJ wrote: I would like my program to be like MS Word. What should I do?
In that case, you could always change the registy setting. See here for more.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
David,
Thanks for the response. I looked at the URL you suggested. I am not up on all this registry stuff so I may have missed the boat. Are you telling me that should set the field NoChangeKeyboardNavigationIndicators in HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Myapp
where the name of my application is Myapp.
If I have this right, is my install script suppose to set this up? By the way, the application I am writing does not currently set any entries in the registry. However, I have a feeling it should.
Bob
|
|
|
|
|
BobInNJ wrote: Thanks for the response. I looked at the URL you suggested.
Which was the wrong one. The registry value instead is:
HKCU\Control Panel\Desktop\UserPreferencesMask
Note the value of the 30th bit when you change the checked state of the "Hide underlined letters for keyboard..." checkbox.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|