|
thank you for your reply
I used two header file and one cpp file. The files are following
// stdafx.h
#define STRICT
#define WIN32_LEAN_AND_MEAN
#define _WTL_USE_CSTRING
#define _WIN32_IE 0x0600
#include <atlbase.h> // base ATL classes
#include <atlapp.h> // base WTL classes
extern CAppModule _Module; // WTL version of CComModule
#include <atlwin.h> // ATL GUI classes
#include <atlframe.h> // WTL frame window classes
#include <atlmisc.h> // WTL utility classes like CString
#include <atlcrack.h> // WTL en
// MyWindow.h
class CMyWindow : public CFrameWindowImpl<cmywindow>
{
public:
DECLARE_FRAME_WND_CLASS(_T("First WTL window"), IDR_MAINFRAME);
BEGIN_MSG_MAP(CMyWindow)
CHAIN_MSG_MAP(CFrameWindowImpl<cmywindow>)
END_MSG_MAP()
};
// main.cpp:
#include "stdafx.h"
#include "MyWindow.h"
CAppModule _Module;
int APIENTRY WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
_Module.Init ( NULL, hInstance );
CMyWindow wndMain;
MSG msg;
// Create the main window
if ( NULL == wndMain.CreateEx() )
return 1; // Window creation failed
// Show the window
wndMain.ShowWindow ( nCmdShow );
wndMain.UpdateWindow();
// Standard Win32 message loop
while ( GetMessage ( &msg, NULL, 0, 0 ) > 0 )
{
TranslateMessage ( &msg );
DispatchMessage ( &msg );
}
_Module.Term();
return msg.wParam;
}
the above program only i got 6 errros
First error:
error C2146: syntax error : missing ';' before identifier 'lpnm'
d:\program files\microsoft visual studio\vc98\include\atlframe.h(1176) : see reference to class template instantiation 'WTL::CFrameWindowImplBase<tbase,twintraits>' being compiled
|
|
|
|
|
|
Hi,
I want to share a CAtlFileMapping object between all simple ATL objects (between all instance of my COM Automation objects).
Basically, I want to load up a file control access to it so that multiple threads will not corrupt it trying to simulaneously write. The file should be accessible to all COM instances so that clients can invoke methods that modify this same file.
Pls advice me as to how I should go about doing this. I've programmed a lot in C++. But I'm completely new to ATL and COM.
Thanks in advace.
|
|
|
|
|
If you are using the single thread model, then COM will serialize all calls to the CAtlFileMapping object on a single thread, so that your object will only get called on one thread. Unless there's something different about the CAtlFileMapping object. It depends on how you CoCreate the CAtlFileMapping. Of course, if the CAtlFileMapping object is registered as "Both", and you are free threaded, you won't get that.
In that case, I would recommend you create a singleton object that all your COM Automation objects call into, and it uses critical sections to protect against calling into the CAtlFileMapping object.
Another solution might be for a custom class factory object. Have the CAtlFileMapping object as part of the class factory. Use CoGetClassObject to get the class factory, QI for your interface. You still need a critical section though, in the class factory to protect multiple access to the CAtlFileMapping.
Once you get past some of the COM/ATL'isms, its very similar to Win32/C++, just use a critical section to be on the safe side.
|
|
|
|
|
Hi everybody,
Does anybody know how to catch Microsoft word application events in a non MFC application (specifically WTL application) ?
thanks in advance,
Roozbeh
|
|
|
|
|
There's too much to specify in detail, but here goes...
Word events are specified as an interface that you (the client that wants to receive the events) have to implement. You tell Word about the interface implementation using Word's implementation of IConnectionPointContainer and IConnectionPoint, which is made simpler if using ATL through the function AtlAdvise.
These two links may help:
COM Events
Event Handling with ATL
Stuart Dootson
'Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p'
|
|
|
|
|
Thank you very much for your help.
Regards,
Roozbeh
|
|
|
|
|
Hi,
I would like to create a effective antivirus program for microsoft windows OS. It must be a light weight component and doesn't take much of time to load.
can i used WTL for this purpose or otherwise i used to SDK. MFC it take two dlls
extra compare than SDK. can WTL support memory concept like process, Threads, etc..
Write Your suggestion .........
Regards,
G. Inbkumar.
|
|
|
|
|
well WTL is not matured enough , although you can use that.
What is the need of using MFC use Win32 - PSDK.
Also why not try .NET - any language.
but that is only about front end.
What about drivers ?
are you planning to write driver in WTL ?
Regards
Tarundeep Singh Kalra
************************
www.tarunsadhana.com
************************
All men die. Not all men really live”. - “Braveheart”, 1995
|
|
|
|
|
Hi,
I'm not sure about where to start doing this so, here is an example of what i want to do.
Place control1 and control2 on a dialog, control2 will now about control1 and be able to list a properties for example.
maybe i have several control1 on a dialog, control2 will list all control1's in a property.
thanks
Gary Rusher
|
|
|
|
|
hi, i created a dll using ATL COM AppWizard, and also with MFC support in order to create certain GUI...
in effort trying to display a dialog from the dll, i create a simple dialog wif just ok and cancel button, and then run ClassWizard and use Cdialog as it's base class..
in implementation, i try to display the dialog as a modal window using DoModal() function, as coding shown below :
Cdialog1 adialog;
adialog.DoModal();
no error or warning display when i compile, but the problem occur when i run the system, where error code i get was :
Debug Assertion Failed!!
was go thru several books and tutorials from internet, and i think there's nothing wrong wif the coding (just 2 lines coding isnt it =.=")
anyone hv idea about wad's going on??
thx in advance...
|
|
|
|
|
No u must derive ur Class from CAxDialogImpl and not from
CDialog.For this use Insert Menu of VC++ IDE.
Insert->New ATL Object->Miscallenous->Dialog
Give a short name ie. dialog1 ,in ur case
Now call
Cdialog1 adialog;
adialog.DoModal();
also try not to use Class Wizard in ATL COM
Hope this solves ur problem
|
|
|
|
|
thx you so much, the problem solved....
|
|
|
|
|
Hi,
I'm new to Win32 programming, and I have to add dialog resource and management in a static lib in order to be used by other application.
I've added dialog resource in lib project and include all ATL stuff inside lib.
Everything compile ok but ATL create dialog function failed with 1812 error, complaining that no resource are present in exe image.
The base application is a classic win32 project without MFC.
What should I check ?
Thanks
Fabrice
|
|
|
|
|
The tab key doesnt work in Web Browser Control. The following code is supposed to resolve it. However the keydown message is not fired at all. There is another code below this one which is supposed to resolve even this problem but I dont know where to place it.
Code 1:
LRESULT CMyClass::OnKeydown(UINT uMsg, WPARAM wParam, LPARAM lParam,
BOOL& bHandled)
{
// m_spWebBrowser is a data member of type IWebBrowser2.
// Using CComQIPtr in this way queries m_spWebBrowser
// for the IOleInPlaceActiveObject interface which is
// then stored in the pIOIPAO variable.
//
CComQIPtr<ioleinplaceactiveobject,
&iid_ioleinplaceactiveobject=""> pIOIPAO(m_spWebBrowser);
HRESULT hr = S_FALSE;
if (pIOIPAO)
{
MSG msg;
msg.message = uMsg;
msg.wParam = wParam;
msg.lParam = lParam;
hr = pIOIPAO->TranslateAccelerator(&msg);
}
return hr;
Code 2:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
// Send all keyboard messages to the window of your
// application. hwndApp is the window handle of
// your application.
//
if (msg.message >= WM_KEYFIRST && msg.message <= WM_KEYLAST)
::SendMessage(hwndApp, msg.message, msg.wParam, msg.lParam);
DispatchMessage(&msg);
}
Harshapaul
|
|
|
|
|
hi, i'm currently working on a bho that works tight with image....
as event disp intercepter...i found we need to connect to DIID_DWebBrowserEvents2 in order to intercept event handler under it, but where can i connect to in order to intercept event handler fired by an image events??
thx a lot
|
|
|
|
|
Send me your email address , i will send you dummy BHO Source code that handle DOCUMENTCOMPLETE event.
hope you can modify the rest!!!
"I Think this Will Help"
[Vote One Here,.....]
<h5
alok gupta="" <br=""> visit me at http://www.thisisalok.tk
|
|
|
|
|
already send a msg to ur email.....
really appreciate for ur help....thx a lot....
|
|
|
|
|
|
hmmmh, this article work wif onclick event, for element which created by the system itself...tat's wad i understand from the coding....correct me if i'm wrong....=.="
but in my case, i would like to intercept from any webpage browsed....e.g. in DWebBrowserEvents2, a dispid DISP_NAVIGATECOMPLETE2 is used to intercept the IE's control whenever the browser finish navigate certain page...
as for my page, i would like the user to click any image from any website, intercept the control and get the image's PIDL for my bho usage.....using this interface IHTMLImgEvents2 http://msdn.microsoft.com/workshop/browser/mshtml/reference/events/htmlimgevents2/htmlimgevents2.asp
again, correct me if i'm wrong in any of these understanding
ur help is appreciated so much
|
|
|
|
|
I'm trying to extend a CEdit ctrl in WTL. But i havn't found out how to paint in the control after the default paint mechanism.
Is there a way to invoke the default paint mechanism while handling WM_PAINT, something like CEdit::OnPaint(...)?
|
|
|
|
|
|
This is simplified version of what I am doing but still shows the issue : The Copy Ctor is being called by the for_each algorithm. Whilst in this case it isn't an issue, but in my live app it is. Why is the copy ctor being called and can I prevent it..?
class ProcessVector
{
public:
ProcessVector(const ProcessVector &rhs)
{
cout << "copy ctor" << endl;
}
ProcessVector()
{
cout << "ctor" << endl;
}
~ProcessVector()
{
cout << "dtor" << endl;
}
void operator ()(int i)
{
cout << i << endl;
}
};
int main(int argc, char* argv[])
{
std::vector <int> test;
for (int i = 0 ; i< 5; i++)
test.push_back(i);
for_each(test.begin(), test.end() , ProcessVector() );
return 0;
} gives the following output
ctor
0
1
2
3
4
copy ctor
dtor
dtor Regards
Angel
*********************************************
The sooner you fall behind, the longer you have to catch up.
|
|
|
|
|
It's by design - the C++ Standard specifies that the function object is passed by value, not by reference and that a *copy* of the function object is returned by for_each . You'll have to work round whatever problems this causes you.
Stuart Dootson
'Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p'
|
|
|
|
|
Easy, add an extra level of redirection to manage the lifetime. This issue is described as Stateful Predicates in the book Exceptional C++
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
class ProcessVector
{
public:
ProcessVector()
{
cout << "ctor" << endl;
}
~ProcessVector()
{
cout << "dtor" << endl;
}
void operator ()(int i)
{
cout << i << endl;
}
ProcessVector(const ProcessVector &rhs)
{
cout << "copy ctor" << endl;
}
};
class ProcessVectorIndirect
{
public:
ProcessVectorIndirect(ProcessVector* process)
: pProcess(process)
{
}
void operator ()(int i)
{
(*pProcess)(i);
}
private:
ProcessVector* pProcess;
};
int main(int argc, char* argv[])
{
std::vector <int> test;
for (int i = 0 ; i< 5; i++)
test.push_back(i);
ProcessVector vect;
for_each(test.begin(), test.end() , ProcessVectorIndirect(&vect) );
return 0;
}
|
|
|
|