|
Hi,
I made HTML Help for every topics of my applicaiton.
I want to get help form all dialog,but it refersa single help file,but depends on dialog it shows the topic..So i coded for that.
My coding is here
BOOL CDisturbance::OnHelpInfo(HELPINFO* pHelpInfo)
{
HWND hwnd = GetSafeHwnd();
CString Path = gsInstallPath + "\\esim\\help" + "\\";
CString HFName = "IStation.chm";
CString Folder= Path + HFName;
HtmlHelp(0, Folder, HH_DISPLAY_TOPIC, ByVal "Disturbance.htm");
return TRUE;
}
I found this code from net as article,
But when i compile,it shows undeclared identifier for Htmlhelp.
SO tht i include
#include <htmlhelp> and i add htmlhelp.lib in project settings.
But where can i get htmlhelp.h file?
Anu
|
|
|
|
|
Did you see MSDN "CWnd::HtmlHelp" and its header is "afxwin.h" whats your compiler?
Of one Essence is the human race
thus has Creation put the base
One Limb impacted is sufficient
For all Others to feel the Mace
(Saadi )
|
|
|
|
|
Anu_Bala wrote: But where can i get htmlhelp.h file?
See here Html help[^].
You need to install the heml help workshop and add the include and lib paths to your VC++ directories.
I hope it helps.
Regards,
Sandip.
|
|
|
|
|
Thank u..I got the file.
Anu
|
|
|
|
|
But i couldnot get the particular topic..
Pls any one help me the sample coding for htmlhelp API.
Anu
|
|
|
|
|
Anu_Bala wrote: Pls any one help me the sample coding for htmlhelp API
See here[^]
I hope it helps.
Regards,
Sandip.
|
|
|
|
|
Hi,
My project contains an ATL dialog and the dialog has many CWnd objects as children. I am representing the Cwnd objects by bitmap images. Now when some other window or tooltip hovers over the CWnd objects, they are erased. Also they do not get any erasebkgnd messages. The parent dialog gets erasebkgnd but it does not solve the problem.
The same problem occurs when we hide the tooltip. The area of the CWnd which the tooltip covers is erased. Any solution of this?
|
|
|
|
|
I am not sure if I fully understood your question but if you are painting things on a window (for instance bitmap images), you need to do that each time you receive the WM_PAINT message. Otherwise, your window is cleared and you do not draw anything in this handler, which means everything disappear.
|
|
|
|
|
May be needs something like "InvalidateRect" ?
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
Probably not. Because a paint message is sent when your window is covered by another window (at the time it reappear) and calling InvalidateRect also ends up sending a WM_PAINT message. Thus if it doesn't work when your window is hidden, it won't work just by calling InvalidateRect.
|
|
|
|
|
The dialog which i was speaking about is only one of the page of the application. And OnPaint method for the same is not defined for the Dialog. I tried handling the message myself. In that case I was able to paint my CWnd objects there, but as I don't know how to paint the Dialog (The code of the dialog is not by me), I end up in painting only half of the things. So I can not handle the WM_PAINT message for the dialog.
And when other window hovers over my application, my CWnd object does not receive any messages.
|
|
|
|
|
1/
whatever17 wrote: And OnPaint method for the same is not defined for the Dialog
It's defined if you put it there. CDialog inherits from CWnd, and can handle any window message you ask it to. Just because a method is not put in for... does not mean you can't put it in for yourself. Don;t forget to add ON_PAINT to your message map.
2/
OK, I only had one real point. Erm...
3/
See 2.
4/
Now I remember!
whatever17 wrote:
And when other window hovers over my application, my CWnd object does not receive any messages.
Well, what messages did you expect to receive? WM_YEP_STILLQUIETOUTTHERE? Your window is covered up. It's not receiving any keyboard or mouse input, and not needing to redraw. Unless there are system wide messages to do with system changes, or you've set a timer, there's really not much for you to respond to.
Have a look under the dialog / windows section of codeproject for all sorts of articles on technicolour odd shaped dialogs. They've done it already - steal their work without paying! It's what we're here for...
Iain.
Codeproject MVP for C++, I can't believe it's for my lounge posts...
|
|
|
|
|
Okay I think I was not clear enough in the last post. Still I had mentioned that the code of the dialog is not by me. It contains many other things than the CWnd objects which I want to show on it. Also WM_PAINT is not handled. I already tried handling WM_PAINT myself, which was working for my CWnd objects. But as the dialog contains many other things which are not mine, I don't know how to paint those. Hopefully you will read it this time.
And about the other thing, I was expecting that the CWnd objects will receive WM_ERASEBKGND message, which now I am not sure about.
Thanks.
|
|
|
|
|
OK, I'm a little confused now.
If the code is not yours, it sounds like you have two choices.
1/ If you have the code, fix the bugs. Then the answers become the same as though the code was by you.
2/ If you don't / can't have the code, demand your money back, or that the supplier fixes their bugs.
I'm also not understanding when you say the CWnds are represents by bitmaps. Isn't the point of child windows that they draw themselves? If the dialog contains many things that are not yours, should they not be responsible for their own WM_PAINT handlers?
---
In answer to your WM_ERASEBKGND question... All windows DO receive that message. Most will ignore it, and let the default behaviour happen in DefWndProc. This will either fill the whole rectangle using the brush defined in the window class (not C++ class, the WNDCLASS), or if that is NULL, set a flag in the PAINTSTRUCT used in WM_PAINT to say that the paint handler needs to erase the window manually.
Good ol' fashioned Win32. There are many times I'm glad I started this game before using MFC. It's great, but it can hide a bit too much at times.
Iain.
Codeproject MVP for C++, I can't believe it's for my lounge posts...
|
|
|
|
|
The code is not mine means I do not own the code. Someone else has written the code and I am not supposed to change much of it.My child windows are able to paint themselves. But their OnPaint() is not called in the particular cases I have mentioned. Calling it from the OnPaint of parent was the optimal solution but I can not handle the OnPaint of the dialog as it is giving me some other problems. Is there any other solution?
As I have mentioned earlier, the CWnd does not even receive ERASEBKGND.
|
|
|
|
|
whatever17 wrote: Someone else has written the code and I am not supposed to change much of it.
At least you can try changing the code as suggested by others and see if that solves your problem. If it does and then if you explain properly to whomsoever is saying that do not change the code much will also agree. By just saying i am not supposed to change will not help you. I dont understand how you plan to fix the bugs without changing the code.
Anyways all the best!!!
Regards,
Sandip.
|
|
|
|
|
Thanks Sandeep for the reply. As I have already written in my previous posts, changing the code, that is, handling WM_PAINT is not helping either. Its not a bug which i am solving. I am trying to add new functionality. Anyways its very difficult to explain the problem here. I will try on my own.
Thanks.
|
|
|
|
|
I am sorry if you feel my post was harsh. But i did not intend so.
My only concern is just do not stop trying things because you are not supposed to change much code.
whatever17 wrote: I will try on my own.
Yes for that i am saying don't bother about how much code you change when you try. If you are required to add new functionality you will need to code what ever it takes.
Regards,
Sandip.
|
|
|
|
|
Wohoo my problem is solved. The dialog which I had mentioned earlier, is getting WM_WINDOWPOSCHANGING message whenever other window hovers over it. I am handling the same and invalidating my CWnd over there. Spy++ helped to find that particular message.
|
|
|
|
|
Here I have a problem
I am trying to automate Applications (FILE->EXIT) function.
that is closing the application.
Problem : When I open my application using createProcess() a notification is sent tat application started.But when i used following to close application no nofication is sent.
if( TerminateProcess(piProcessInfo.hProcess,0)) {
CloseHandle(piProcessInfo.hProcess);
}
This code is not acting as way as (FILE->EXIT)
Please help!!!
|
|
|
|
|
You say you are not able to get the process status after you call "TerminateProcess()"?
He never answers anyone who replies to him. I've taken to calling him a retard, which is not fair to retards everywhere.-Christian Graus
|
|
|
|
|
TerminateProcess is not good idea for close a program you can send WM_CLOSE to your program.
Of one Essence is the human race
thus has Creation put the base
One Limb impacted is sufficient
For all Others to feel the Mace
(Saadi )
|
|
|
|
|
can you tell me how to do this
Ex: I want to close "notepad.exe" with wm_close
|
|
|
|
|
If your target applciation has a window, you can find your target application using FindWidnow() API.
This will return the window handle of the target application. Using that handle you can send WM_CLOSE message.
Ex: HWND hWnd = ::FindWindow( NULL, "TargetAppName" );
::SendMessage( hWnd, WM_CLOSE );
akt
|
|
|
|
|
Thank you very much. This works fine.
But say if I have 2/3 instances of same application, how do I extend this to close particular window?
|
|
|
|