|
Do you know where I can find a setp by setp turorial for write a Factory class in an ATL project?
|
|
|
|
|
Thats the beauty of ATL, it will completely take care of the ClassFactory for you.
Here are the few simple steps that you need to take:
- Register your COM object with the server. You can do this by locating the OBJECT_MAP in your server. The object map looks like this:
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_CMyClass, CMyClass)
END_OBJECT_MAP()
This lets the server know about your object, and enters the ClassFactory into the table of creatable objects, once you define your ClassFactory.
- The next thing is to derive your class from CComCoClass. This class will create the ClassFactory automatically for your. When you derive from this class, you specify the CLSID and the name of your class like this:
class CMyClass : ...,
public CComCoClass<CMyClass, &CLSID_CMyClass>
{
...
};
I hope that this helps you. However if you want a more complete reference, especially how to extend a ClassFactory, then refer to Rector / Sells book on ATL Internals. It has an excellent chapter on COM Servers.
|
|
|
|
|
dear all,
I am using MFC Dialog based application in my project.
it will run on NT services.
My question is
"how can i send a mail if there is any error occur"
please help me
thanks in advance
|
|
|
|
|
|
ok, since everyone ignored me i'm going to ask the question again.
please take the time to reply if you know the answer:
Is there any way to know from inside an Explorer bar what page is
displayed on the main window of the web browser, and/or catch
events (HTML) from that page?
~!~!~
|
|
|
|
|
Hi!
This sample is some about your problem:
=== CUT ===================================================================
#include <iostream>
#include <atlbase.h> // for CComPtr
#include "exdisp.h" // ShellWindows
#include "mshtml.h" // MSHTML
void main()
{
CoInitialize(NULL);
try
{
CComPtr<IShellWindows> spShWin;
if (FAILED(spShWin.CoCreateInstance( __uuidof( ShellWindows))))
throw std::cout << "Couldn't create object SHDocVW::ShellWindows";
// Get Open windows counter
LONG nCount;
spShWin->get_Count( &nCount);
std::cout << ((nCount)?"Shell windows list:":"none ...") << std::endl;
for (int i=0; i<nCount; i++)
{
// get next window
CComPtr<IDispatch> pDisp;
spShWin->Item( CComVariant(i), &pDisp);
CComQIPtr<IWebBrowser2> pIE( pDisp);
if (pIE == NULL)
throw "Unable to query Internet Explorer object";
// get URL (or folder)
USES_CONVERSION;
CComBSTR bsUrl;
pIE->get_LocationURL( &bsUrl);
LPTSTR lpstrUrl = W2T(bsUrl);
// Try to get html-document
CComPtr<IDispatch> pDispDoc;
pIE->get_Document( &pDispDoc);
CComQIPtr<IHTMLDocument2> pHtmlDoc( pDispDoc);
// If success - then this is Internet Explorer's window
if (pHtmlDoc)
{
std::cout << " Internet Explorer: " << lpstrUrl << std::endl;
// for example, change bkgr color to blue
pHtmlDoc->put_bgColor( CComVariant( L"blue"));
}
// Else it is Explorer simply.
else
{
std::cout << " Window Explorer: " << lpstrUrl << std::endl;
// Close window
pIE->Quit();
}
}
}
catch(char* lpstrErr) {
std::cout << lpstrErr << std::endl;
}
catch(...) {
// Unknown error...
std::cout << "Unknown error..." << std::endl;
}
CoUninitialize();
return;
}
=== /CUT ===================================================================
May be this way will be useable
This page contains description of IHTMLDocument2 interface -
this interface allow to do all with IE instance.
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/ifaces/document2/document2.asp
|
|
|
|
|
thank u so much for not ignoring me,
and for helping me.
again, thanks !!
|
|
|
|
|
How can I make use of hicolor bitmaps in my toolbars?
|
|
|
|
|
void SetTbImageList(CToolBar &tb, UINT nMessage, UINT nIDBitmap)
{
CImageList imageList;
CBitmap bitmap;
bitmap.LoadBitmap(nIDBitmap);
BITMAP bm;
bitmap.GetBitmap(&bm);
imageList.Create(bm.bmHeight, bm.bmHeight, ILC_COLORDDB|ILC_MASK, 0, 1);
imageList.Add(&bitmap, RGB(255,0,255));
tb.SendMessage(nMessage, 0, (LPARAM)imageList.m_hImageList);
imageList.Detach();
bitmap.Detach();
}
SetTbImageList(m_toolbar, TB_SETIMAGELIST, nBitmapColdID);
SetTbImageList(m_toolbar, TB_SETHOTIMAGELIST, nBitmapHotID);
SetTbImageList(m_toolbar, TB_SETIMAGELIST, nBitmapID);
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
Thanx...i'll use that later to if you don't mind.
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
Is there a way to enable hicolor when using LoadToolBar? I dont want to create the tool bar from code.
|
|
|
|
|
Use LoadToolBar first - it'll assign command IDs to buttons. Then, call the routine I've posted to change images to hicolor.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
See following article -
http://www.codeproject.com/docking/toolbar_hotbuttons.asp
|
|
|
|
|
Hi,
I wanna implement child windows in a Win32-Application (not using MFC). Works fine, but there's a problem with the focus: in apps like Photoshop, the tool windows stay "blue", i.e. they dont get deactivated when clicking anywhere else in the main window. Also, when clicking in one of these tool windows, the main window doesnt get deactivated, and they are floating, so they are no overlapped windows. Any ideas how to implement this?
|
|
|
|
|
Handle WM_NCACTIVATE to avoid color changes in title bar.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
Thanks.
Oh man, its THAT easy.
I really should learn to search the MSDN with better keywords.
*doh* =)
|
|
|
|
|
I need to dynamically create a mask from a full color bitmap. How would you go abouts doing this...?
I have an idea...but i'm curious if there is a easier approach...?
Thanx!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
Create a one bit bitmap and ( from memory ) make the colour you wat to be black the background colour, then blt onto it. There's an article in MSDN, and it's something like that. It's part of how to create transparency masks on the fly. The WDJ site has code to do it from my Sept 2001 article, but it's been ages since I did anything like that, so I'm not entirely sure of the details.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
"I'm somewhat suspicious of STL though. My (test,experimental) program worked first time. Whats that all about??!?!
- Jon Hulatt, 22/3/2002
|
|
|
|
|
Thats sorta what I had in mind.
I figure i'll use the first pixel as the background...and basically floodfill the entire backgrond with a unique color not used in the image. Then replace any color that doesn't match the background with black.
There are assumtions with this method, but overall it should work eh...?
Thanx Christian..
p.s-If it's an old article will it still be there on msdn...?
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
Thomasz has given you the MSDN articles I was thinking of, but I was saying I used the same method in a WDJ article I wrote. It's on the WDJ site, not in the MSDN
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
"I'm somewhat suspicious of STL though. My (test,experimental) program worked first time. Whats that all about??!?!
- Jon Hulatt, 22/3/2002
|
|
|
|
|
Christian Graus wrote:
Thomasz has given you the MSDN articles
Actually, I'm Tomasz without the 'h'.
Anyway, being in one pack with Petzold feels great
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
*grin* you know, I originally didn't get the Petzold reference ( I assumed he wrote the MSDN articles ), then I thought of it myself and finally put together your comment.
Sadly my thought processes when coding are often this convoluted also :P
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
"I'm somewhat suspicious of STL though. My (test,experimental) program worked first time. Whats that all about??!?!
- Jon Hulatt, 22/3/2002
|
|
|
|
|
What's the criteria for creation of the mask? Do you want all pixels with given color to be RGB(0, 0, 0) in the mask, RGB(255, 255, 255) otherwise?
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
I think I figured it out.
i'll assume the first pixel in the bitmap is the background and I will floodfill the back with a unique color. then replace each non-background color pixel with black and I should have a dynamic mask...?
There are some assumtions being made, but I think it'll work for me.
Cheers!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
HockeyDude wrote:
There are some assumtions being made, but I think it'll work for me.
FloodFill - slow and won't work when you have background areas surrounded by non-background.
'Replacing each non-background color pixel' - very slow, assuming that you want to iterate over bitmap with GetPixel.
Basically, you need to BitBlt to monochrome bitmap having text color and background color set to appropriate values. I can't give you any more advice on this - trade secrets, you know But I'm sure CG will be happy to provide you with the details.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|