|
Nitron wrote:
I guess if you don't have an explicit reason for a DLL, you probably don't need one?
Yep. I see applications that go over 2 MB in size. Alot of that is resources and images, but still your EXEs can get as large as you want.
Build a man a fire, and he will be warm for a day Light a man on fire, and he will be warm for the rest of his life!
|
|
|
|
|
Cool. Thx. Well, I had enough for one week... Have a good weekend!
Oh, I'll be sure to have a or for you!
- Nitron
"Those that say a task is impossible shouldn't interrupt the ones who are doing it." - Chinese Proverb
|
|
|
|
|
I just made my mainframe class inherite from another simple class ( standalone, class, does not inherite from anything else ), and I get these errors :
afx_msg void OnStandardToolBar(NMTOOLBAR* pnmh, LRESULT* plRes);
afx_msg void OnViewToolBar (NMTOOLBAR* pnmh, LRESULT* plRes);
...
ON_NOTIFY(TBN_DROPDOWN, ITB_STANDARD_TOOLBAR, OnStandardToolBar)
ON_NOTIFY(TBN_DROPDOWN, ITB_VIEW_TOOLBAR, OnViewToolBar)
...
D:\\MainFrm.cpp(287) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CMainFrame::*)(struct tagNMTOOLBARA *,long *)' to 'void (__thiscall CCmdTarget::*)(struct tagNMHDR *,long *)'
Pointers to members have different representations; cannot cast between them
D:\\MainFrm.cpp(288) : error C2440: 'type cast' : cannot convert from 'void (__thiscall CMainFrame::*)(struct tagNMTOOLBARA *,long *)' to 'void (__thiscall CCmdTarget::*)(struct tagNMHDR *,long *)'
Pointers to members have different representations; cannot cast between them
I'm assuming it's name conflict somewhere ...
Any Ideas ?
Max
P.S. I hate fridays!
|
|
|
|
|
Maximilien wrote:
P.S. I hate fridays!
Well, I like Fridays myself -- it's the start of the weekend!
But anyway, your problem is not related to name conflicts. If you look at the error, it's expecting you to pass it a function with this signature:
void (__thiscall CCmdTarget::*)(struct tagNMHDR *,long *)
And you're passing it this:
void (__thiscall CMainFrame::*)(struct tagNMTOOLBARA *,long *)
I believe that changing the first parameter to be of type NMHDR (instead of NMTOOLBAR) should take care of the problem.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
even if it actually expect to have a NMTOOLBAR ?
I assume it's safe to do :
NMTOOLBAR* pnmh = (NMTOOLBAR* ) pNBHDR;
in the handler ?
anyway, seems to be working !
Thanks, now I can go home free as a bird !
Max.
|
|
|
|
|
Maximilien wrote:
I assume it's safe to do :
NMTOOLBAR* pnmh = (NMTOOLBAR* ) pNBHDR;
Not only is it safe, it's correct. All the WM_NOTIFY structs have a NMHDR as their first member, think of it as inheritance for C.
--Mike--
Friday's GoogleFight results: Britney Spears 2,190,000 - Erica Weichers 23
1ClickPicGrabber - Grab & organize pictures from your favorite web pages, with 1 click!
My really out-of-date homepage
Sonork-100.19012 Acid_Helm
|
|
|
|
|
How do I add Help File Functionality to my VC++ MDI application ? Please help
|
|
|
|
|
compile your help files using HTMLHelp Workshop, so that you got the *.chm ready. Then in your method to serve the help menu item, just add:
HWND hwnd = ::HtmlHelp(this->m_hWnd, szBuff, 0, HH_DISPLAY_TOPIC);
to display the help file.
remember to include the #include <htmlhelp.h>
and the library.
|
|
|
|
|
Thanks for the help but unfortunately I am getting a Linker error saying
Linking...<br />
MainFrm.obj : error LNK2001: unresolved external symbol _HtmlHelpA@16<br />
Debug/MDI2.exe : fatal error LNK1120: 1 unresolved externals<br />
Error executing link.exe.<br />
<br />
MDI2.exe - 2 error(s), 0 warning(s)
I copied the htmlhelp.h file to the VC98 include directory
and copied the htmlhtlp.lib file to th eVC98 lib directory.
Also I my .cpp I included like #include "htmlhelp.h"
What am I Doing wrong ? Please help
|
|
|
|
|
did you reference the HTMLHEML.lib file in your projects link settings? You need to actually reference the lib in your project, otherwise the linker will not know that it needs to link that file in.
Hit Alt + F7 then go to the link tab. In the "Object/Library Modules" edit field add HTMLHelp.lib and that should fix your problems.
Build a man a fire, and he will be warm for a day Light a man on fire, and he will be warm for the rest of his life!
|
|
|
|
|
Thanks a lot for the suggestions . I was able to invoke a File. THanks
|
|
|
|
|
What do you recommend for creating/editing the help file text/source?
Gaulles
|
|
|
|
|
I am using HTMLHelp Workshop. You can download it from Microsoft's web site.
|
|
|
|
|
I am trying to create a thread to monitor a USB-connected ADC module. Its driver uses a callback function for the configuration of the module. It requires a CWnd handle given to it such that when it has a buffer filled, it sends a OLDA_WM_BUFFER_DONE message to the thread. I created a UIThread so that it would have a message handler and I could create my OnBufferDone function. (Which is working and tested in a single thread situation.) It needs to be in a separate thread so that I can empty the buffer quickly
and move the sample data into my internal buffers and return it back to the ADC module driver before the next buffer_full message comes in.
Does anyone know how to create or get a HWND for a UIThread so that this driver can know where to send messages to my thread?
Thanks in advance,
Dave
|
|
|
|
|
Have you had a look to PostThreadMessage[^] ?
HTH,
K.
I hurt so bad inside
I wish you could see the world through my eyes
It stays the same
I just wanna laugh again
|
|
|
|
|
Hello to all.
I've checked this following article (http://www.cuj.com/experts/1906/hyslop.htm?topic=experts) at CUJ web site and decided to use it in my own application.
So here we go. I have managed to implement the factory inside a windows DLL. But i'm having weird problems with it. Mainly the genericFactory::create method.
This is how i've implemented it (with the modification that I use a pointer to a function with three std::string parameters) :
template <class manufacturedobj,="" typename="" classidkey="">
std::auto_ptr<manufacturedobj>
genericFactory<manufacturedobj, classidkey="">::create(const classIDKey &className,
const std::string& p1,
const std::string& p2,
const std::string& p3) const
{
std::auto_ptr<manufacturedobj> ret(0);
FN_REGISTRY::const_iterator regEntry=registry.find(className);
if (regEntry != registry.end())
{
ret = regEntry->second(p1, p2, p3);
}
return ret;
}
And in my client code this is how I call it :
std::auto_ptr<mysqltable> tbl(0);
tbl = genericFactory<mysqltable>::instance().create("HistoricalDataTbl", host, user, pwd);
-----------------------------------------------------------------------------------------------
When I trace inside the create method, the "ret" variable is fine and points to a valid MySQLTable object. BUT, when the function returns to the client code... I get an unhandled exception error. This error is generated inside the auto_ptr<>::reset() method. To be more precise, the "tbl" auto_ptr in the client code is supposed to be initialized with a NULL pointer but when getting back from genericFactory::create method the "tbl" pointer points to an invalid MySQLTable object.
The quilty code inside auto_ptr :
void reset(_Tp* __px=0) {
_Tp* __pt = this->get();
if (__px != __pt)
delete __pt; //offending line...
this->__set(__px);
}
So i'm currently puzzled has to why the "tbl" variable points to a bad MySQLTable object!?!?!?!
Any help would be greatly appreciated
Luc.
|
|
|
|
|
Well, your sample code doesn't look good since the template parameters were lost by the HTML translation. Try putting the code inside pre tags next time.
However, I did take a quick peek it and it seems like the problem is with your regEntry variable. It's a local variable which, I assume, is returning to you a pointer to a MySQLTable object via the second function which it created internally. My guess is that when the create function returns, regEntry goes away and so does the MySQLTable pointer that it was holding -- which is also in your ret variable. So ret is left holding on to a pointer which is no longer valid.
That's one guess, based on my complete lack of knowledge on FN_REGISTRY.
Another guess is that it has to do with how ret variable is being copied and freed when it gets returned. But it shouldn't be that since ret would be "released" before being copied to tbl , and then it would be freed with a NULL pointer -- should be no problem.
BTW, I noticed you're not using Microsoft's auto_ptr implementation, which doesn't even have a reset (at least not the one in VC6.0)
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
Here is how FN_REGISTRY is defined...
typedef std::auto_ptr<manufacturedObj> (*BASE_CREATE_FN)(const std::string&,
const std::string&,
const std::string&);
typedef std::map<classIDKey, BASE_CREATE_FN> FN_REGISTRY;
FN_REGISTRY registry;
And I use STLPort !!!
P.S. How come, after using the pre tags, that my "<" and ">" gets deleted !?!?!?
|
|
|
|
|
Hey there.. ive never created CEdits without the dialog editor.. now i am trying to create a bunch and have DoDataExchange() when they lose focus.. it doesn't look like DoDataExchange ever gets called in my view tho.. here is how i am creating my fields:
CEdit* pEdit = new CEdit;
pEdit->Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_AUTOHSCROLL,
CRect(10, 10, 110, 30), this, 1);
how can i make a field like this call DoDataExchange() when it gains focus? or better yet, how can i make it call a function when it loses focus? i only know how to use the BEGIN_MESSAGE_MAP and END_MESSAGE_MAP .. is there a way to make this message map dynamically?
thanks for the help
still a newb.. cut me some slack :P
-dz
|
|
|
|
|
I think you need to handle this using the OnCommand message if you have created a dynamic control.
Sara
|
|
|
|
|
|
I'm using MFC's and MDI`s,I can change the window style after the creation of the window?
|
|
|
|
|
Yes, some of the styles can be changed ( dependent on the Cwnd ( derived Cnwd ).
look at CWnd::ModifyStyle and CWnd::ModifyStyleEx
Max.
|
|
|
|
|
Thanks
|
|
|
|
|
Good morning,
I'm trying to have a small window to hover over my view (opengl ), following the mouse; a bit like a toolip, but needs to stay, not hide after a small delay.
so, I created a CWnd derived class with the text and all the trimmings, added _TrackMouseEvent to the view to be able to receive the WM_MOUSELEAVE and WM_MOUSEHOVER so that the window is shown only if the mouse is over the view's client.
It's working, but the display is bad, I have bad refresh.
I move the windows on the MouseMove of the view, it works ok, but it will, I think, trigger a redraw, so I get too much flicking ( even with double buffer ).
The question, is there way to make the hover window behave more like it was a overlay thing ?
Oh Bugger!, I'm just answering the question when writing this ... the parent window of the my Cwnd was bad ... much better ...
move on... just crazy programmer ... nothing to see ... move on ...
Max.
|
|
|
|
|