|
Thank you very much for your reply. I have finished developing the application as MFC. Now I have MFC executable. But now I need to design a single GUI to control all the functions.
I dont develop the application as dll as of now it is available only as MFC executable. I also go through the VC++ windows application forms and found it is better for designing GUI.
Now my question is that, "Is it possible to migrate the VC++ MFC code into Windows application form". It will be very easy for me, if the above one is possible.
Please guide me. (I am only having little knowledge in Windows application forms. If I am not explaining you correctly means, please advice.)
Many thanks in advance.
|
|
|
|
|
oh! I am sorry for the very late reply.
"Is it possible to migrate the VC++ MFC code into Windows application form"
> No. AFAIK, you cannot directly copy MFC code into C#. You will need to make significant changes as the two languages are different.
But you have no trouble. Just create a dll. For that, create an empty MFC dll using wizard, and then copy your mainframe, view and doc class (assuming you are using doc/view architecture in MFC application) directly into dll and write the functions you want to export in the one cpp file of dll created by wizard.
You wont need to do any changes in code to create dll. and then you can use this dll in your C# application.
Hope that helps.
the fruits of your success will be in direct ratio to the honesty and sincerity of your own efforts in keeping your own records, doing your own thinking and, reaching your own conclusions.
..surviving in autumn..in love with spring..
|
|
|
|
|
I am using IActiveDesktop:SetWallpaper function to set the wallpaper. My application generates a bitmap, say D:\image.bmp and then this image is set as wallpaper. The problem is when I edit this image.bmp and call set wallpaper again, the new picture is internally set but is not updated on desktop. I mean to display the new edited picture I need to go to properties->Desktop and then ask windows to load image again.
Is there any way to programmatically tell windows to reload the wallpaper image. I guess it just assumes that if path is same, then no need to reload the image?
the fruits of your success will be in direct ratio to the honesty and sincerity of your own efforts in keeping your own records, doing your own thinking and, reaching your own conclusions.
..surviving in autumn..in love with spring..
|
|
|
|
|
|
Hey, thanks for the useful link. The link you have given will be helpful to me in many other ways although the problem I had can be solved by passing AD_APPLY_FORCE flag to ApplyChanges function of IActiveDesktop interface. I was using AD_APPLY_ALL but it was not refreshing the desktop.
the fruits of your success will be in direct ratio to the honesty and sincerity of your own efforts in keeping your own records, doing your own thinking and, reaching your own conclusions.
..surviving in autumn..in love with spring..
|
|
|
|
|
I glad my answer was helpful for you.
|
|
|
|
|
|
IActiveDesktop::ApplyChanges( AD_APPLY_ALL ) alone wont do. You need to pass AD_APPLY_FORCE function to refresh the same picture. AD_APPLY_ALL do not include AD_APPLY_FORCE. Thanks for your reply.
the fruits of your success will be in direct ratio to the honesty and sincerity of your own efforts in keeping your own records, doing your own thinking and, reaching your own conclusions.
..surviving in autumn..in love with spring..
|
|
|
|
|
ooh! Thanks for the info!
Regards,
Jijo.
_____________________________________________________
http://weseetips.com[ ^] Visual C++ tips and tricks. Updated daily.
|
|
|
|
|
In the main window callback function I get the WM_KILLFOCUS message when I click on the window, and only then I get the WM_SETFOCUS message.
Is that OK?
I thought that WM_KILLFOCUS message is sent to a window immediatly before it looses focus.
I want to register some values when the window has keyboard focus and unregister the values when the window looses focus.
How can I do that?
danginkgo
|
|
|
|
|
do you have child controls on your main window??
Regards,
Sandip.
|
|
|
|
|
I have child controls on the main window.
danginkgo
|
|
|
|
|
then probably WM_KILLFOCUS is for one of the child window which was having focus earlier.
Check the vlaue of wParam in WM_KILLFOCUS. It is a handle to new window which will get the focus.
You can verify that WM_KILLFOCUS was not for your main window by comparing wParam with your main window handle.
And to find which window lost the focus check value of wParam in WM_SETFOCUS.
Regards,
Sandip.
|
|
|
|
|
OK, but if the main window loses focus, doesn't it get the WM_KILLFOCUS message? I just have to unregister some hotkeys if the window loses focus. How can I do that?
danginkgo
|
|
|
|
|
How can I know when the main window loses focus?
danginkgo
|
|
|
|
|
I dont have much idea about SDK, but Try this I hope it works,
WM_SETFOCUS: if the wParam is handle to your main window then it means that your window has lost the focus. (Unregister ur hot keys)
WM_KILLFOCUS: if wParam is handle to your main window then it means that your window is going to get the focus (register your hot keys).
If this doesnt work may be some one can correct as i am really not sure.
Ohh I forgot about HWND parameter of WindowProc.
I guess It will point to your main window whenever whenever WM_KILLFOCUS will be generated for it and similarly for SetFocus.
Regards,
Sandip.
modified on Tuesday, June 24, 2008 5:07 AM
|
|
|
|
|
I tried but it doesn't work.
For WM_SETFOCUS and WM_KILLFOCUS , the wParam is not the main window HWND.
Ex.
wParam = 0x000209fc
This->hwndView = 0x000209ee
hWnd = 0x000209ee (HWND parameter of WindowProc)
So, I can't register and unregister if I get those messages.
danginkgo
|
|
|
|
|
did you manage to get it working it or not can you paste some code snippets for the same.
Regards,
Sandip.
|
|
|
|
|
This is the callback function for the main (view) window:
<br />
<br />
LRESULT CALLBACK FldViewWndProc (HWND hWnd,<br />
UINT wMessage,<br />
WPARAM wParam,<br />
LPARAM lParam){<br />
PluginInstance* This;<br />
................................................<br />
case WM_KILLFOCUS:<br />
This = (PluginInstance*) GetWindowLong(hWnd, 0);<br />
if((HWND)wParam==This->hwndView)<br />
register hotkeys<br />
break;<br />
<br />
<br />
case WM_SETFOCUS:<br />
This = (PluginInstance*) GetWindowLong(hWnd, 0);<br />
if((HWND)wParam==This->hwndView)<br />
unregister hotkeys<br />
break;<br />
..................................................<br />
}<br />
danginkgo
|
|
|
|
|
are you getting the same values in both cases you mentioned in your previous reply.
Regards,
Sandip.
|
|
|
|
|
yes, the same values
danginkgo
|
|
|
|
|
In the documentation I found that the wParam for WM_KILLFOCUS is the window handler for the window that receive focus, so I'll get this message in the WindowProc function if I click on the main window.
So, I can't use this message, because I want to unregister the hotkeys when the main window loses focus, not immediately before it gains focus.
Is it wright what I wrote?
danginkgo
modified on Tuesday, June 24, 2008 7:31 AM
|
|
|
|
|
The problem is I don't get any message in WindowProc if the window loses focus.
danginkgo
|
|
|
|
|
Hi
I tried it in a sample application
1> Main window with two edit controls.
2> In WM_LBUTTONDOWN i called SetFocus(hWnd);
I noticed is that if i dont call setfocus explicitly i dont get the WM_SETFOCUS notification.
and moreover when i switch between the two edit control i dont get any notification.
may be you can try something like following. i dont see any need of using GetWindowLong.
case WM_LBUTTONDOWN:
SetFocus(hWnd);
break;
case WM_KILLFOCUS:
unregisterkeys;
break;
case WM_SETFOCUS:
registerkeys;
break;
I hope it helps.
Regards,
Sandip.
|
|
|
|
|
My code is exactly like what you wrote.
The problem is I don't get the WM_KILLFOCUS message only when I return to the app window. If the focus is on the app window and I go to other window then I don't get any message.
danginkgo
|
|
|
|