|
Based on an existing *.exe file, where only resources (e.g. included bitmap resources, icons,...) should be changed.
|
|
|
|
|
You could consider using one or more resource only DLLs instead of using the resources in the exe itself. If the exe is your own code then modifying it to load an external resource dll and use those resources instead should not be too much work. If it isn't then you arguably shouldn't be messing with it in the first place. If you must then there are tools available to rip and replace the resources out of a PE ( Microsoft's Portable Executable format ) binary. Google or Dogpile would be good places to start looking. If you're going to do this then watch out for subtle, or even custom, bitmap formats and other tweaks which the executables code might rely on to render things right. Initially I'd keep everything the same size, i.e. same size bitmaps and same number of bytes in each resource wherever you can.
"The secret of happiness is freedom, and the secret of freedom, courage."
Thucydides (B.C. 460-400)
|
|
|
|
|
I have a CListCtrl control and a child dialog on the parent dialog. When I click on an item in the list, I display the detials of the selcted item in the child dialog.
Now I would like to do the same when I press arrow and page down/up keys.
I'm currently using LVN_KEYDOWN message. The problem is that when I go from item no 0 to item no 1, the selected index change is not seen by the LVN_KEYDOWN (so in the message handler, the selected item will be 0 instead of 1).
One thing more My CListCtrl control is also getting updated after every 8 seconds and by default one item is always selected that is why I am not able to use LVN_ITEMCHANGED.
Please tell me how to achieve this.
Thanks In advance.
modified on Tuesday, September 16, 2008 7:58 AM
|
|
|
|
|
You should be able to use LVN_ITEMCHANGED . It should not matter that the control is being automatically updated.
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
|
I have a CArray of structs that I want to be able to sort.
Ie:
struct _Blah_
{
CString Name;
CSomeOtherStruct other;
DWORD dwSomething;
};
CArray<_Blah_, _Blah_&> BlahArray;
The C libs come with a sort command that takes a compare function, but that does binary swaps. That may be fine for very basic structs in a CArray, but not if it is a class with virtual methods, etc.
I could write a sort function for my particular array / class combo, but I'm sure there's a more elegant way of doing this...
Feel free to give me pointers to some vector::sort library or such... I'm a novice in that area!
Thanks,
Iain.
|
|
|
|
|
Iain Clarke wrote:
I could write a sort function for my particular array / class combo, but I'm sure there's a more elegant way of doing this...
Feel free to give me pointers to some vector::sort library or such... I'm a novice in that area!
I dont normaly use CArray, but with std::vector, having your vectored classes have an operator<</code> and <code>operator!= would be enough.
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all. Douglas Adams, "Dirk Gently's Holistic Detective Agency"
|
|
|
|
|
Thanks - looks more elegant then writing my own predicate!
Iain.
|
|
|
|
|
If its just about the predicates, I also like boost.orgs lambda-lib[^]
With it, you can write the predicate exactly where you need it, not somewhere else.
Comes in handy when your classes do not have the one, inherent order, but instead need to be sorted by varying criteria.
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all. Douglas Adams, "Dirk Gently's Holistic Detective Agency"
|
|
|
|
|
Just added a comparison, and it works a treat, thanks!
Iain.
struct NamedPos
{
CString Name;
... other member data here
bool operator < (NamedPos const &p) const;
}
bool NamedPos::operator < (NamedPos const &p) const
{
return (Name.Compare (p.Name) < 0);
}
...
NamedPos p;
p.Name = "1";
m_NamedPositions.push_back (p);
p.Name = "3";
m_NamedPositions.push_back (p);
p.Name = "2";
m_NamedPositions.push_back (p);
p.Name = "5";
m_NamedPositions.push_back (p);
p.Name = "4";
m_NamedPositions.push_back (p);
std::sort (m_NamedPositions.begin(), m_NamedPositions.end ());
|
|
|
|
|
Iain Clarke wrote: it works a treat
Great!
Actually, operator overloading is a good thing!
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all. Douglas Adams, "Dirk Gently's Holistic Detective Agency"
|
|
|
|
|
Iain Clarke wrote: Feel free to give me pointers to some vector::sort library or such...
I don't know what you are looking for exactly but the STL does have sorting algorithms. You can have a look here[^] (don't look at how he is inheriting from std::vector, because, in my opinion, it is not really the way to do).
The function swap two items, meaning that it uses the assignement operator and the copy constructor (not sure about this one). You could override this operator for your structure if you want to make it more efficient (if possible). I don't really see how you could sort, without swapping items anyway...
Does that more or less answer your question ?
|
|
|
|
|
Cedric Moonen wrote: Does that more or less answer your question ?
Yes thanks - the prevailing winds are blowing in STL's direction. I'll try jwurmbach's idea of providing comparison operator's in my own struct first - seems like less heavy lifting.
Iain.
|
|
|
|
|
|
Thanks for that. Interesting article.
STL's vector and sort are looking more elegant, but I've used a lot of CArray's over the years...
Decisions... decisions!
Iain.
|
|
|
|
|
The 'cheat' I generally use for this is a bit of a zen solution. I don't sort the array at all
Instead I keep a parallel array of simple unsigned integers and I sort that and use it as an index into my array of complex objects. I use the standard sort algorithums but my comparator functions, instead of just comparing integers uses them to look up the real array and returns a comparison result dependent on what it finds there.
If you dig around in the source of my constructional patterns article [^] you'll find an indexed list class, possibly even templated so you use it with your data structures.
"The secret of happiness is freedom, and the secret of freedom, courage."
Thucydides (B.C. 460-400)
|
|
|
|
|
"The best way to sort is to not sort at all".
Very wax-on, wax-off...
My structures are not highly horrible to swap about, luckily, but I can see your method being very useful if copying is an expensive or impossible process (ie, open DB handles are a classic baddie).
As you normally give good answers, I assume your articles are worth a peek too...
Iain.
|
|
|
|
|
Thanks for the vote of confidence, it's nice to be able to actually point someone at some relevant code for a change. I'm always finding myself wanting to refer to code, in answers to questions, which I either can't post or no longer have or worse still know that I must have but can't find.
"The secret of happiness is freedom, and the secret of freedom, courage."
Thucydides (B.C. 460-400)
|
|
|
|
|
Iain Clarke wrote: How to [...] with minimum effort
Uhmmmmmmmmmmmmm, what a lazy guy.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
CPallini wrote: what a lazy guy.
Isn't that the best bit about programming? The lazy way is often the best one. Less typing -> less bugs.
That only works if you're lazy over the long term though... Short term laziness leads to more work overall.
(And yes, I know you were getting at me. Sigh... I'm such a martyr...)
Iain.
ps, "Infamy, infamy, they've all got it in for me!".
|
|
|
|
|
Unless it's a trivial structure, if I need to sort an array, I usually use a pointer array. Swapping items then becomes just swapping the pointer.
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
HI,
Could anyone see memory leak in following code? When I used some debugging tool, it is telling me 'Memory Leak due to reassignment:Address 0x10084 allocated by global_operator_new'.
static const char DEFAULT_DATE_FORMAT[] = "US";
DSLoginConfigurationImplementation::DSLoginConfigurationImplementation(const char *CategoryPath):m_ImportDateFormat(NULL)
{
Restore(CategoryPath);/*This function will call below function*/
}
void DSLoginConfigurationImplementation::SetInputDateFormat(const char* ImportDateFormat)
{
if(!DSAccessConfigurationImplementation::GetInUse())
{
if(m_ImportDateFormat!=NULL)
{
delete [] m_ImportDateFormat;
m_ImportDateFormat=NULL;
}
if(ImportDateFormat!=NULL && strlen(ImportDateFormat))
{
m_ImportDateFormat=new char[strlen(ImportDateFormat)+1];/* debugger is pointing here showing memory leak*/
strcpy(m_ImportDateFormat,ImportDateFormat);
}
}
}
Please help.
Thanks in advance.
|
|
|
|
|
That seems pretty straight forward, m_ImportDateFormat is being allocated with new at the line indicated and then never deleted. The only delete I can see in your sample occurs before the new!
"The secret of happiness is freedom, and the secret of freedom, courage."
Thucydides (B.C. 460-400)
|
|
|
|
|
m_ImportDateFormat is a class member variable and it has taken care in the destructor. Meory allocated here is de-allocated in the destructor.
|
|
|
|
|
SRKSHOME wrote: in this code?
Well, if you're going to cheat and start tidying up outside, then all bets are off!
Please modify your post to use the pre tags (code block). It's hard enough reading your own code, let alone others. And other people's code without formatting is even harder.
Iain.
|
|
|
|