|
Hi all,
I have a problem in using tab to shift the focus from one control to another. Mine is an ATL dll with MSF support which has around 20 views in splitter window and each view will be shown when a particular selection is made in the left pane. My problem is that in all these views I am not able to change the focus from one control to another using the tab key though I have set the TabStop property foa al the controls.
Also I tried to handle the Tab key by overriding the PreTranslateMessage function. But the control is not at all going to the function on tab key operation.
Pls give me a soln if any one has.
Thanks in advance,
-manju
|
|
|
|
|
Hi ,
I also faced the same problem a year back in not for a ATL but in a Hidden ACtiveX which has a DialogBOX inside the ActiveX -
Problem is - The ActiveX or ATL Control doesnt has its own message queueso pretranslate message doesnt come to it at all - The control is with the parent window so all the WM_KEYDOWN messages routed to the parent window. I had a small work around - I had the pretranslate message of Parent Container window overridden and got the Window Handle of the Message source and then set the focus to the desired Target window. This is a very immature and primitive solution - then when i posted it in code guru i had this solution after 1 year though its effective - take a look into it and lemme know if u are able to solve the problem
Below is my post - so u can have the whole thread
---------------------------------------------------------------------------------------------------
Hi I have a peculiar problem ,i used the method of creating mainframes and dialogs inside a dll , but i created them inside a activeX control (invisible one) and below is the problem .
Thanx
Bush
Problem :
We have developed 2 activex conrols using the activex wizard from MSVC++ 6.0 SP3.
The architecture of the ocx is as below :
ActiveX A-
This is developed with DocView architecture in mind (Microsoft MIND magazine article 1996-97).But slightly modified for creating a complete mainframe application inside a invisible OCX control.Interfaces are written for creating and showing the application through the ole control.In design time we have placed the control inside a MFC dialog based application and generated a wrapper class for it and are able to create and show the Mainframe application inside the ocx.Problem comes when we there is a ALT+anykey combination on the application.The ole conrol
just hangs for ever,also it hangs the whole application.We were able to get to a point where we see exactly which message is fired and tried to handle the same by handling pretranslate message of the mainframe inside the control and doing a PeekMessage and PM_REMOVE from the message Q for a quick workaround.But it didnt work.The app still hangs.
ActiveX B -
This is similar to the ActiveX A but is a dialog application.
Functionally they are wokring absoulutely fine except for the ALT+ANYKEY combination where the application from the activeX just hangs.
PS:The dialog's or the mainframes PretranslateMesage is just not getting called.
---------------------------------------------------------------------------------------------------
This was posted by Aditya Roy on codeguru to my comment regarding the above problem . Please not this was for my activeX with a MFC Dialog in it - this should be the same case as urs - so check it out and see if this helps
---------------------------------------------------------------------------------------------------
The reason for it -
ActiveX's do not have its message queue, the host container's Queue is used. So all key messages are taken by the container as your dialog is probably non modal.
Solution -
1. Make a Static function called hpMsgProc
LRESULT CALLBACK hpTest::hpMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
LPMSG lpMsg = (LPMSG) lParam;
if( (nCode >= 0) && PM_REMOVE == wParam && (lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST) && AfxGetApp()->PreTranslateMessage((LPMSG)lParam) )
{
lpMsg->message = WM_NULL;
lpMsg->lParam = 0L;
lpMsg->wParam = 0;
}
return ::CallNextHookEx(hook, nCode, wParam, lParam);
}
2. Make a member variable called hook of type HHOOK.
3. In InitDialog, add
hook = ::SetWindowsHookEx(WH_GETMESSAGE,hpMsgProc,AfxGetInstanceHandle(),GetCurrentThreadId());
In Onclose, free it.
::UnhookWindowsHookEx (hook);
this should work.
-Roy
---------------------------------------------------------------------------------------------------
Regards
Bhushan
|
|
|
|
|
I have written a COM server an an COM client. Both work well when used locally, but when I try to use them on two different machines it doesn't work.
The client is on Win98 and the server is on WinNT 4, I use DCOMCnfg.exe to configure access.
When I trace into the CreateDispatch of the client, it fails when calling OleRun(). A blue screen appears '... 0028:c02cfa16 in VXD VREDIR...', and in the debug window :
Warning: CreateDispatch returning scode = severity: SEVERITY_ERROR, facility: FACILITY_WIN32 ($800706BE).
First-chance exception in TestProxy.exe (RPCRT4.DLL): 0x800706BE: (no name).
First-chance exception in TestProxy.exe: 0xE06D7363: Microsoft C++ Exception.
D:\Projects\Softwings\TestProxy\TestProxyDlg.cpp(95): OLE Execption caught: SCODE = 800706beThe thread 0xFFF9DB85 has exited with code 13 (0xD).
Can someone help me
|
|
|
|
|
I have created one singleton COM server for Exe applications and service interaction. So, we should create one instance of COM server for the system. I
have tested with two or more Exe application(Clients). Its working fine. Right now, I have one service and Exe application as its client and they need to interact with same instance of COM Server. But, COM manager creates two instances. One for Exe application(user account), another one for Service(Default account).
I tried Interactive user Option as I wrote in my previous mails but that has some other limitations like not starting if no one is logged on the PC after restarting for quite sometime.
|
|
|
|
|
Y should register your COM server as NT service.
soptest
|
|
|
|
|
Hi all,
Again, the names COM, DCOM and COM+...? What's the difference between them as I see them used in similar contexts all the time.
/Tommy
|
|
|
|
|
DCOM is distributed COM,and it's for networking component.
COM+ is new technology that come after COM and available in W2K and later.
Mazy
"So,so you think you can tell,
Heaven from Hell,
Blue skies from pain,...
How I wish,how I wish you were here." Wish You Were Here-Pink Floyd-1975
|
|
|
|
|
As Mazdak has pointed out, DCOM is for distributed networking components and is COM components that are meant to be implemented across networks and as such there are quite a few issues like security etc.
COM+ is the next advancement to COM and is usually though that COM+MTS = COM+. Thus, generally, when an enterprise COM component additionally handles issues like transactions coupled with state management, it is a COM+ component.
#define MOSTLY_LEAN_AND_MEAN
|
|
|
|
|
Hi Amit:
I think you made a mistake,you have to reply to Tommy Svensson ,not me;)
Mazy
"So,so you think you can tell,
Heaven from Hell,
Blue skies from pain,...
How I wish,how I wish you were here." Wish You Were Here-Pink Floyd-1975
|
|
|
|
|
Hi,
Everybody is talking about COM and how great it is... Does anyone know of a good book to read on this subject or a site on the net which deals wíth COM from super scratch? Preferably with VC++.
Thx a lot,
/Tommy
|
|
|
|
|
Essential COM by Don Box
Michael
|
|
|
|
|
Thx! Will have a look at it!
|
|
|
|
|
Hi, Tommy see my aswner to Nish about COM books
COM/ATL BOOKS
Cheers,
Joao Vaz
|
|
|
|
|
Joao Vaz wrote:
Hi, Tommy see my aswner to Nish about COM books
COM/ATL BOOKS
Thx a lot Joao,
/Tommy
|
|
|
|
|
I second Essential COM. The beginning chapters in ATL Internals give a very good overview of how some of the COM object details are done (and it's a good book to get anyway, it's not nearly as advanced as MFC Internals, and it's a nice ATL reference).
Once you're ready to do coding, check out my intro to COM article.
--Mike--
Best score on the mini-putt game: 26
My really out-of-date homepage
Sonork - 100.10414 AcidHelm
Big fan of Alyson Hannigan and Jamie Salé.
|
|
|
|
|
Michael Dunn wrote:
I second Essential COM.
Too late! I just bought 'Developers Workshop to COM and ATL' by Andrew Troelsen!
Read your article on Intro to COM.
I figured you were the right person to ask this question:
I program a lot using MFC but now I'm on the threshold of a new project where I would like to add functionality to internet explorer (and later also the office suite). In this special case I would like to add a toolbar with buttons and stuff where some of the buttons should simply copy selected text in the browser document for further processing (internal search engine) in my code.
Now, do I need to know how COM works in order to achieve this?
Thx Michael,
/Tommy
|
|
|
|
|
|
That one was on me...
Ok, as I have understood the situation, COM is a relatively new technology and people before COM must have been abled to communicate with other programs, right? After all, COM was invented to ease up the DLL mess, which is a mess I believe can do the same as COM but in a more cumbersome way...? Am I completely off track?
/T
|
|
|
|
|
No, COM has been around for a long time in computer terms. Win 95 used it. Before COM, IPC (inter-process communication) was done with DDE (dynamic data exchange), which was just plain clunky and inefficient.
COM still has the DLL mess however - servers can be in DLLs, which are subject to all the DLL Hell problems.
--Mike--
Rollin' in my 5.0
With the rag-top down so my hair can blow.
My really out-of-date homepage
Sonork - 100.10414 AcidHelm
Big fan of Alyson Hannigan and Jamie Salé.
|
|
|
|
|
Hi all,
I have a server running on Win2000, and I am trying to configure the client to run on Win98 without any luck. I have the client exe and type library on the client's machine, and I believe that all the necessary information has been registered into the registry. However, when I used OLE/COM object viewer to instantiate the object ( on Win98 ), I got a "Class not registered" error. Does anybody know what is missing?
Sunny
|
|
|
|
|
Hello Sunny,
- You should have Dcom98 installed on your machine, i think this is installed by default , if not look on your win98 cd or in msdn for dcom98.
-Second you shoud run the DCOMCNFG.EXE on both computers to configure the connect and security settings, if you don't have this file checkout the cd or msdn.
- Third for a default configuration on both computers try this
check Authentication to none,everyone allow access in server component in win2k and Connection Oriented tcp/ip as default protocol.
This should fix the normal error "class not registered" on the client computer(this normally is due to DCOMCNFG.EXE absence or misconfiguration )
Hope this helps,
Joao Vaz
|
|
|
|
|
This is probably a dumb question I am pretty new to ActiveX though. I built a simple ActiveX control using App wizard and got an OpenGL renderer running in my browser, but now I need to be able to load data. Can someone tell me how I am supposed to do this? I'd like to have a data file stored on the server and be able to open it in my ActiveX control.
Any help would really be appreciated,
Jackson
|
|
|
|
|
Check FILE
Mazy
"So,so you think you can tell,
Heaven from Hell,
Blue skies from pain,...
How I wish,how I wish you were here." Wish You Were Here-Pink Floyd-1975
|
|
|
|
|
Not sure I know what you mean. Could you give me a few more clues?
|
|
|
|
|
FILE is a structure and you can use it to open,read, or write files with it.You said you have a data file and you want to read it from your ACtiveX.
This is an example from MSDN:
FILE *stream, *stream2;
void main( void )
{
int numclosed;
if( (stream = fopen( "data", "r" )) == NULL )
printf( "The file 'data' was not opened\n" );
else
printf( "The file 'data' was opened\n" );
if( (stream2 = fopen( "data2", "w+" )) == NULL )
printf( "The file 'data2' was not opened\n" );
else
printf( "The file 'data2' was opened\n" );
if( fclose( stream ) )
printf( "The file 'data' was not closed\n" );
numclosed = _fcloseall( );
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
Is that what you want or I misunderstood your problem?
Mazy
"So,so you think you can tell,
Heaven from Hell,
Blue skies from pain,...
How I wish,how I wish you were here." Wish You Were Here-Pink Floyd-1975
|
|
|
|
|