|
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_subclas3.asp
Note Do not superclass the scroll bar control class because Windows uses the class name to produce the correct behavior for scroll bars.
But I cannot find any special code that handle the scrollbar in ATL.
|
|
|
|
|
You can subclass the scrollbar. Subclassing doesn't affect the class name. The article mentions that superclassing scrollbars don't work.
I.e., create the scrollbar, and then subclass it. See CWindowImpl::SubclassWindow() .
retinoscopy wrote:
But I cannot find any special code that handle the scrollbar in ATL.
Scrollbars are usually handled by intercepting WM_HSCROLL and WS_VSCROLL . When the scrollbar is manipulated by the user, it sends either of those messages, depending on its orientation, to its parent window. Windows can be created using the WS_HSCROLL and WS_VSCROLL window styles, which will automatically add scrollbars to the window. This is done by windows itself, and not ATL (MFC nor WTL for that matter).
See this[^] for information about scroll bars, and then take a look at either CWindowImpl::SubclassWindow (to implement a class which handles the subclassing), or see CContainedWindowT[^] (to intercept scroll bar messages in another class' message map).
If you haven't already, take a look at WTL, as it makes windowing with ATL a lot easier.
--
...Coca Cola, sometimes war...
|
|
|
|
|
Thank you for you timely reply.
|
|
|
|
|
I don't have the WTL yet, but I will download it to look into the code.
I wonder why the scrollbar must be handled differently from all other controls, i.e. cannot be superclassed? Suppose that I want to create a scrollbar control and I want intercept all windows messages sent to it, if I cannot superclass it, I have to globally subclass it, otherwise I have to setup some CBT hook before creating the control. If I globally subclass the scrollbar, however, I think I have to undo the subclassing of all scrollbar that are created (just after I globally subclass the scrollbar control) by another threads from some DLLs made by other people.
|
|
|
|
|
retinoscopy wrote:
I don't have the WTL yet, but I will download it to look into the code.
WTL is sort of like MFC, but very much ATLish. WTL provides all the standard controls with CWindow-derived counter parts, as well as a couple of controls implemented in WTL (CWindowImpl-derived). For the most part, the MFC docs are valid.
retinoscopy wrote:
I wonder why the scrollbar must be handled differently from all other controls, i.e. cannot be superclassed?
Probably due to some laziness of a Microsoft hacker It was probably a tradeoff they made to make some implementation aspect easier.
--
...Coca Cola, sometimes war...
|
|
|
|
|
Hi I've basically created a Class called a Session which uses the STL <vector> container to Add 'Jobs objects'. The Job objects add further record objects.
The class as it stands is working fine.
What i want is to write the Session object to a file.
then the next time the app starts i want to read back in the class data from the file.
What i've tried:
1:
I've played with File Mapping, and it seems fine with structures but when i try it with my class using STL, it falls over.
2:
ofstream using the binary flag. - this seems to write it away ok but i have real trouble reading it back in.
Have you had any experience writing a class object to a file that uses the STL?
thanks in advance
Carl
Assemblysoft.com
|
|
|
|
|
crandall wrote:
Have you had any experience writing a class object to a file that uses the STL?
What I usually do is overload the << operator and use that to write my class data members to the stream. You can do this for a stream or a CArchive if you're blending in MFC. This way you could just add the object in your Serialize() code or just insert it natively to a stream.
~Nitron.
ññòòïðïðB A start
|
|
|
|
|
1:
If i overloaded the << operator would i be able to achieve something like below?
(might not be completely accurate as just started using fstream rather than fstream.h)
Session s1
s1.DoSomething();
ofstream dataOut(pfileName,ios::binary);
dataOut.write( (char*) &s1,sizeof s1);
dataOut.close();
//On another Day
ifstream fin;
Session *pob;
ifstream fin;
fin.open(pfileName,ios::binary);
fin.read((char*) pob,sizeof(pob));
pob.DoSomething();
fin.close();
2:
With the read in, If the Session contains a vector container of objects of another class, would the sizeof(pob) be correct?
thankyou
Carl
|
|
|
|
|
No, it doesn't work that way. You have to manually store off your data members individually because they are most likely not in a contiguous memory block. If Session was a struct and you were careful of your struct member data alignment, then that could possibly work out OK.
~Nitron.
ññòòïðïðB A start
|
|
|
|
|
Ok i see how i would do that for the Session class, and i just read an article on transient types which need to be converted to basic types first, but how would i go about storing the items in the vector?
do i store each member of each object by looping through with an iterator?
thanks
Carl
|
|
|
|
|
crandall wrote:
do i store each member of each object by looping through with an iterator?
yup.
~Nitron.
ññòòïðïðB A start
|
|
|
|
|
Ok so i can't see why i can't get that bit to work.
How about reading it back in? (please don't just say reverse it)
I create an object of the class
Do i then go through and push_back (re create) from my basic types?
Does that mean i need to store the amount of records for later?
STL was supposed to make my life easier - lol
thanks
Carl
|
|
|
|
|
crandall wrote:
(please don't just say reverse it)
Well, you could either store the number of records as you mentioned, or you could just process until you reach eof(). Have a look at my CDataFile class[^] to see how I do it.
~Nitron.
ññòòïðïðB A start
|
|
|
|
|
thanks a lot for your help
|
|
|
|
|
|
Thanks Todd. I have managed to get this thing working without any testing code but i will definitely look at the code, it seems really good plus i'm not using xml which could be of benefit later. - Cheers
Carl
|
|
|
|
|
Hello, I am interested in
creating a standard cookie file from
a .exe application, that will later
be consumed by a intranet
application via the ie browser.
(I'd like to be able to generate
client side cookie files without without actually
running the ie browser).
is this possible from a client side only app (.exe)?
any help is appreciated.
sas
|
|
|
|
|
|
thanks. I'll take a peak
now [cookie newbie).
sas
|
|
|
|
|
Reposted also in VC++ forum, cause I'm not sure which forum this question is for. So:
I have a lot of different C++ objects with members. String ints etc.
Objects get populated from database. Used to do it using MFC ODBC classes. Then I decided to go OLE DB. Wow! So. Now instead of CRecordset we use CAccessor<> , right? To map members to fields now I have to use TCHAR or CComBSTR for strings, right?
But I'd like to keep my objects as CString or std::string . I don't want to change all my code to operate with CComBSTR and I don't want make parallel just members to transfer data from database to my members. What do I do then? Is there a way to make COLUMN_ENTRY to accept CString or std::string ? Or somehow make an automatic transfer from one global CComBSTR (that would be used to retrieve the data) to those members?
Confusing?
|
|
|
|
|
Hey!
every one
I want to convert a Dialog based MFC application that contains a Microsoft Web Browser Control and the standart buttons on the dialog into an ATL based Composite Control.
If YES... then how?
Thanks and regards.
Zubair.
|
|
|
|
|
It does not free the HIMAGELIST in the destructor. I've become painfully aware of this today. I don't know if it's by design or not, but it's highly annoying!
--
...Coca Cola, sometimes war...
|
|
|
|
|
Looking in the WTL mailing list archives...(from April 2001) it looks like it was a bug that was left in for 'backward compatibility'. Quoting Nenad:
Changing this now would mean that the class with the
same name (CImageList) would have a different behavior, and that is why
that wasn't done. I would do it, but I am afraid that would break
existing code in a bad way.
Stuart Dootson
'Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p'
|
|
|
|
|
Hi All
I am working on DB2 backup utility using Vendor APIs in the form of shared library. But when i call it using control center or through command line interface (CLI)
through this command
db2 => BACKUP DATABASE TOOLSDB LOAD /home/shitij/harpreet/libvend OPEN 1 SESSIONS WITH 1 BUFFERS BUFFER 1024 PARALLELISM 1 WITHOUT PROMPTING
where “/home/shitij/harpreet/libvend” is the path of the shared library.
I receives following error:
SQL1224N A database agent could not be started to service a request, or was
terminated as a result of a database system shutdown or a force command.
SQLSTATE=00000
it fails in :
int sqluvint ( struct Init_input *in, struct Init_output *out, struct Return_code *return_code)
function call .
May be i am not able to initialized the “struct Init_output” structure properly, specially “void *pVendorCB “part of this structure.
But I am very much sure that sqluvint is called and it is known through log generated from this function.
Can any body help me out to overcome this problem?
Thanks a lot
|
|
|
|
|
Do you know where to find information(a tutorial for example) on how to design STL-like containers(with their respective iterators) in order to be used with the algorithms of the STL library? Which compiler is best when you need ISO C++ and (as full as can be) STL support?
Thank you!
|
|
|
|