|
Pretty standard stuff in my main dialog:
ON_NOTIFY(TVN_SELCHANGED, TREE_MYCOMPUTER, OnTvnSelchangedMainFoldertree)
That worked fine in VS 2003, but doesn't work with 2008 and the latest SDK/Framework.
It's a skin based app, so all controls are created dynamically, and there are defines for each control, and a multitude of maps to contain everything.
So, what I did:
My tree is a class derived from the standard CTreeCtrl. I put a handler in that class for ON_NOTIFY_REFLECT, and it will get the notification now.
What worries me, is I have hundreds of hand coded handlers in my main message map, and now I'm going to have to test them all, and try to find workarounds, or just go back to building on 2003...
|
|
|
|
|
Here's the wizard-generated code for a TVN_SELCHANGED handler.
Any differences from yours?
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CMyDlg::OnTvnSelchangedTree1)
afx_msg void OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult);
void CMyDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<lpnmtreeview>(pNMHDR);
*pResult = 0;
}</lpnmtreeview>
Note the way the method pointer is passed in the message map entry
(this change and its effect is still being debated on other forums).
Also make sure you don't have a OnNotify() override that's not calling the
base class OnNotify().
That's all I can think of at the moment.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
Hi everyone!
I want to make a C++ service (that runs constantly in the background) and what it does is every few seconds, it checks the content of a folder. If the folder is empty it does nothing and if it has some files in it it will execute a script (that will be written, a batch file)
Can anyone help me make something like that? It's supposed to be quite simple.
Thanks!
Jonathan
|
|
|
|
|
|
|
Hai every one ,
I am developing an application in vc++ for video conversion.I need to convert mpeg to mpeg4.Please any one help me to find a solution.I searched a lot for some third party libraries .But i didn't yet found a solution.I know no free libraries will be available ,please any one help me.
Thanks in advance.
sree
|
|
|
|
|
Have you checked if Media Coder[^] could be of help to you?
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche
.·´¯`·->Rajesh<-·´¯`·.
[Microsoft MVP - Visual C++]
|
|
|
|
|
maybe check out "VLC" too.
|
|
|
|
|
http://en.wikipedia.org/wiki/Ffmpeg[^]
...cmk
The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.
- John Carmack
|
|
|
|
|
u can try total video converter. That might help u.
|
|
|
|
|
Hi, Here is singleton class. I have written destroy function to destoy the instance. But it is giving me error like test::~test' : cannot access protected member declared in class 'test'.
<br />
class test<br />
{<br />
protected:<br />
static test* m_instance;<br />
test(){}<br />
virtual ~test(){}<br />
<br />
public: <br />
static test* Instance()<br />
{<br />
return m_instance;<br />
}<br />
<br />
};<br />
test* test::m_instance = NULL;<br />
<br />
class test1 : public test<br />
{<br />
protected:<br />
test1(){}<br />
virtual ~test1()<br />
{<br />
destroy();<br />
} <br />
static void destroy()<br />
{<br />
if(m_instance)<br />
{<br />
delete m_instance;<br />
m_instance=NULL;<br />
}<br />
}<br />
public:<br />
static test1* instance()<br />
{<br />
if(!m_instance)<br />
{<br />
test:: m_instance = new test1();<br />
}<br />
return (test1*) m_instance;<br />
}<br />
<br />
void disp()<br />
{<br />
cout<<"hi"<<endl;<br />
}<br />
};<br />
<br />
int main()<br />
{<br />
test1::instance()->disp();<br />
return 0;<br />
}<br />
Pleae correct me where should I delete this instance.
|
|
|
|
|
I guess you are using VC6 ? This is a bug in the VC6 compiler. It is a very old compiler so I suggest that you upgrade to a more recent Visual Studio.
If you want to stick with VC6, make the destructors public, this should fix the problem.
|
|
|
|
|
|
I have a dialog box which in the OnInitDialog function scans for some system resources and performs a variety of checks to find those which match some criteria - those that match the criteria are added as text to a combo box on the dialog.
The dialog box then appears, with the combo box populated. The user can select a combo box entry and click the dialog's OK button (or Cancel button).
Because all of the checks are done in OnInitDialog, the dialog box does not appear at all until all of the checks are complete. There is only a brief delay in the dialog's appearance on a fast PC, but on older PCs the delay may make the user think nothing is happening.
I think what is needed is for the dialog to appear immediately with a "Scanning resources..." message written on the dialog, and the OK button disabled. The resources are then checked (I'm not sure which function where this could be done) and when complete the combo box is populated and the OK button enabled.
It would be good to allow the user to click the Cancel button while the resource checking is being performed, and this would stop the checking immediately and close the dialog box. This suggests that the resource checking should be done in a separate thread so that the Cancel button would be immediately responsive.
Is there an off-the-shelf CDialog based class available which does this or something similar?
If not, what CDialog function would be the correct place to put my resource checking. It would have to run AFTER the dialog has been fully painted.
|
|
|
|
|
Start a separate worker thread in OnInitDialog, passing to the thread (among other things, probably) the HWND of the dialog, and let OnInitDialog return. Do your work in the thread procedure, and post a message back to the dialog (that's what the HWND is for) to tell the dialog to redraw itself with the new information.
Don't forget to handle the case where the user closes the dialog while the worker thread is still running.
|
|
|
|
|
|
Thanks Graham and Michael. I was aware of the peekmessage technique of checking for the cancel button being pressed and processing GUI messages. Graham's outline is how I had thought I'd have to do it.
It struck me that this sort of thing could be a frequent requirement - i.e.
- immediate appearance of dialog box displaying "please wait while scanning..."
- processing of data that takes several seconds
- controls then updated with data (and the please wait message removed)
- Cancel button stops processing and closes dialog immediately (no user-perceived delay)
and that someone may have written a CDialog derived class already.
|
|
|
|
|
Done, using Graham's outline. Thanks
|
|
|
|
|
Hello everyone,
When using GetRecordInfoFromGuids to get record info from a typelib from an application, we only need to correctly supply the LIB ID (1st parameter to the function), and the function will automatically finds related typelib by the LIB ID in from Windows registry? No need to manually copy the typelib to the application current directory or manully copy somewhere else?
http://msdn.microsoft.com/en-us/library/ms221025(VS.85).aspx
I have tested it is fine just to supply the correct LIB ID, no manually copy is needed. But since my experience of using this API is limited, your confirmation and comments are appreciated.
thanks in advance,
George
|
|
|
|
|
Hi,
I'm going to conncect to a database file (Database#1.mdf) which I need to connect to directly. (Specifying the mdf file name in the connection string).
Can you provide a code that uses OLE DB to connect to the database?
the database is created in Solution explorer pane of visual studio and the created mdf file is stored somewhere in c:\Database#1.mdf.
Thanks.
|
|
|
|
|
Hi all,
I want to write a buffer content into a ostream. So I try this.
<br />
int CopyBufferTo(ostream& str;)<br />
{<br />
char writeBuffer[100] = {0};<br />
str.write(writeBuffer, 200);<br />
<br />
return 0;<br />
}<br />
Is that fine. I print the stream to console, and I can see the expect output. But then I want to attach as follows,
int AttachTo()<br />
{<br />
stringstream str(ios::in|ios::out|ios::binary);<br />
if(CopyBufferTo(str) == 0)<br />
{<br />
char test[256] = {0};<br />
sprintf(test, "%s", str.str());<br />
memcpy(400, buffer, 200);<br />
}<br />
}
I hope it's clear to you, after attaching the stream to buffer it contain part of it. Not the output on console. Can you help me to find where I'm going wrong.
Thanks
I appreciate your help all the time...
CodingLover
|
|
|
|
|
CodingLover wrote: char writeBuffer[100] = {0};
// Do the processing on buffer
str.write(writeBuffer, 200);
Shouldn't the second argument to write() match the size of writeBuffer ?
CodingLover wrote: char test[256] = {0};
sprintf(test, "%s", str.str());
What happens if str is larger than 256 characters?
CodingLover wrote: memcpy(400, buffer, 200);
Do you have a variable named 400 ?
"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 know .NET framework and C# well. Recently I started working with C++/CLI which I felt more interesting than C#. Since .NET framework is becoming popular, do you think MFC got obsolete? Are you guys doing any projects in MFC other than maintaining the legacy applications?
I don't know MFC and I would like to know whether learning MFC is worth now?
|
|
|
|
|
Christian Flutcher wrote: Is MFC obsolete?
NO, it is NOT !
there's nothing better than native C++ coding !!!
|
|
|
|