MSHTML MFC Tutorial - mfc

I know this has been asked twice before but both had no proper replies and are dated so in case someone has found something in these days, I'm asking again!.
Any one knows any good tutorial for MSHTML or some open source project which can be read to understand how various operations can be done in MSHTML - MFC?
Thanks

Your question makes it difficult to know exactly what you are trying to do, but the main MFC class that you need to use is CHtmlView. The MSDN has the definitive sources of information about it:
CHtmlView class
Creating a Web
Browser-Style MFC Application
Using MFC to Host a WebBrowser Control
If you find those links a bit terse, then this page contains some slightly friendlier articles:
Advanced CHtmlView Hosting
However, I would also ask whether you are definitely 100% sure that you want to use MFC?
The reason I ask is because I've worked for a number of years on an open-source project that hosts the Microsoft WebBrowser control and we saw significant performance improvements when we stripped out MFC from the project. The MFC abstractions weren't really buying us anything over the COM interfaces that are exposed by the control. Stripping out the MFC also made our code much simpler.
The project is open source, so if you want to see the code for yourself, you can get more information here. It is specifically the LibRender project that hosts the WebBrowser control. If you want to see it running, you should build the SWViewer solution.

The one place I like to visit for MFC is Newcomer's site There are some useful tutorials and demos of various things there. Although its more of a general MFC site, so maybe you can find what you are looking for there.

Related

Creating GUIs in Win32 C++

I'm developing my first Windows desktop application and I'm trying to figure out what the best approach would be to create the program's GUI.
I know, I know... I feel stupid for asking considering the amount of data on the subject on SO. However most answers seem outdated and I'm not sure if they fit my specific project. Also tutorials for Windows 8 'metro apps' are clogging my Google search results, which is NOT what I'm looking for.
I use Visual Studio. I've followed tutorials. I have basic knowledge of C and Java and extensive experience with PHP. I'm excited to learn C++, so I'm not looking for GUIs to create a GUI (like WinForms). I also don't care about managed code and portability for now, especially since I'm trying to avoid dependencies (i.e. users having to install .NET). As long as it runs smoothly on Vista and up, I'm happy.
The application
The software will teach basic physics to kids. I'd like to create a main area and a sidebar. The main area will feature a physics animation, say a bouncing ball, along with some Q&A. Users can zoom in to the animation to measure some stuff and answer the question. Users can track their progress in the sidebar. That's pretty much it.
What I've found so far
I'm getting a bit frustrated with MSDN. Most of their examples are given in four different languages (C#, C++, etc). I can't seem to get more than a bit of Hello World code from them.
I found a GDI API on MSDN and it seems like a good start for me. However I've read quite a few answers on SO saying creating layouts in pure C++ is really hard, that we're better of using frameworks like ATL and WTL. Since I'm also going to create (somewhat interactive) animations, I've wondered whether I should use gaming-targeted APIs like Direct2D.
Since all of this is new to me, and there are a lot of options, I don't know where to start for my particular application. Any tips would be greatly appreciated!
Using the raw Win32 API (no additional downloads or third-party helpers):
Here's a good primer (introduces dialog boxes, text boxes, buttons, etc): theForger's Win32 API Tutorial
And here's where you go from there (numeric up-downs, list boxes, combo boxes, tooltips, and more): Common Controls on MSDN. Most of these require you to #include <commctrl.h>.
I also found this to be a good resource that covered what the other two didn't: Win32 Developer - Window Assets
But the Win32 API doesn't seem like it does exactly what you want. A physics app for kids should have a more visual GUI than the API can provide. Good luck, though!
If you're ok with adding additional Frameworks, I'd suggest looking at Qt.
It allows to create the GUI from code only, has a good structure, and has an Interface for 2D drawing, if required.
If you are concerned about dependencies, you only have to include the Qt DLLs to your executables; no installation is required for the user.
To get started, see my (old) tutorial "Lessons in Windows API Programming".
But you really need a good book, such as edition 5 or earlier of Charles Petzold's classic "Programming Windows".
The problem with latest edition is that it's for C# and .NET, with Charles grabbing the tail of the "new way" at just the wrong timeā€¦
Disclaimer: I haven't checked the details of edition numbers.
Using the Windows API is the simplest, but producing advanced GUIs can take a very long time. Microsoft Foundation Class is a way to make the Windows API more user friendly and OOP. Does anyone have any experience with MFC?
Why not use some 2D C++ game engine, like HGE: http://hge.relishgames.com/overview.html.

Automating Internet Explorer using C/C++

I want to write a small utility which can automate internet explorer using C++ (No MFC).
Some of the actions which i want to automate are :-
1. Opening a url
2. Clicking on a hyperlink in the browser instance
3. Setting the value of text boxes
4. Checking checkboxes, drop down menus etc.
I am an absolute beginner, and have no experience with COM, however i am currently in the process of learning.
Can anyone guide me, like suggesting the resources and a breif outline of what i need to do to automate.
I will really appreciate it.
Thanks,
Ashish.
I strongly recommend the Microsoft Visual C++ compiler COM support.
Generally it works like this:
#import "c:\path\to\typelib.tlb"
#import "c:\path\to\library.dll"
#import "c:\path\to\program.exe"
This then makes it very easy to use Internet Explorer or any other COM object from C++.
See here for documentation:
http://msdn.microsoft.com/en-us/library/h31ekh7e.aspx
Jeremy Thompson suggested the basic answer: use a WebBrowser control. That's far easier in C#, because it includes quite some of the boilerplate code you need. Even MFC contains some of that. Without that, you'll need to implement a proper ActiveX container. For someone not knowing COM at all, this is highly non-trivial. ActiveX is an advanced COM technique. There's a bit of sample code here
Once you've hosted it, things become fairly trivial in comparison. Opening a URL is just a single call: IWebBrowser2::Navigate(URL, flags...)

Can I make a game using c++ that will run on the web?

There is some libraries that lets you run C++. So, it is it possible to run a game that uses directx full mode screen?
Google is developing a tool to allow this kind of thing via Chrome. It is called Chrome Native Client, or NACL for short. http://blog.chromium.org/2010/05/sneak-peek-at-native-client-sdk.html
In general, no. Most online games are written with Javascript, Flash, the newly hatchedd HTML5 and similar technologies. Perhaps C++ integration is possible on some level, but you definitely cannot write a browser-hosted game purely and entirely in C++.
it could also be done with an ActiveX control. ActiveX only works in IE. there are Netscape plugins that work in other browsers. so make a solution that contains both. you need a book on ActiveX/COM/OLE. Better yet, take a class if you can find one, you will learn far more, because COM is not an easy subject to just read about and then really do - versioning is a big problem.
nope, not supported in firefox. but read this: http://www.google.com/chrome/intl/en/webmasters-faq.html#activex
some people may have activex controls disabled. if this is the case, your game will not run. you will have to tell the user that they will need to change their security settings in IE. you can get feedback from the object element in javascript as to whether or not the activex loaded. there is code out there for that.
http://msdn.microsoft.com/en-us/library/7sw4ddf8%28v=vs.85%29.aspx
examples are all over the internet.

How is the Win32 API used in C++ to minimize a window to the system tray?

Pretty much a self-explanatory title. I'm writing an application in C++ with the Win32 API, and I'd like to know how to minimize to the system tray. I can find all kinds of articles online about minimizing to the system tray in C#, Python, even Visual Basic, I think, but for the life of me I can not find a single article on how to minimize something to the system tray in C++.
Any and all help or even redirection would be highly appreciated.
EDIT: Question answered. Once I knew about the Shell_NotifyIcon function, I was easily able to find this CodeProject article which is exactly what I needed.
All you need is the Shell_NotifyIcon function. You ought to be able to work it out from MSDN, but if you need more help I'm sure there are a million places on the web that give samples. Now that you know the name of the API, web search will fill in the gaps.

searching for winapi functions

I'm learning programing windows applications with C++. Now I'm reading about messages and I'm playing with the spy++.
What function spy++ use in order to mark/highlight the window under mouse cursor?
Also, can you give me some tips about using MSDN? I'm my opinion is not user friendly at all.
I'm learning programming by myself and i can't get some real life experience tips as those which are learning at college or in teams.
ty
Not sure exactly what your problem with MSDN is ... I tend to go to e.g. Win32 and COM development and look around for a suitable category in the listing to the left, then click down from there. Or just enter function names and search if I already know what I'm looking for but want the reference documentation. On the other hand, I'm not much of a Win32 developer.
I think spy++ is just inverting the colors directly on the window/screen DC (You could use InvertRect() for example) On Windows 2000 and later, it is probably better to use a translucent layered window if you actually wanted to implement this window highlight since some graphic corruption can occur when messing with other windows behind their back.
Writing a Windows application with just the windows API is possible, but you'll end up writing huge amounts of boilerplate code just to create simple things. This is why people normally use libraries built on top of it to make things easier - MFC for example.
The MSDN article Creating Win32 Applications provides a good explanation of the ins-and-outs of a Windows application using the Win32 API. Bare in mind though that you could build the same application in minutes using MFC.
I agree that MSDN is not the most user friendly source of information for a beginner. In my opinion it works much better as a reference.
My advice would be to focus on building some test applications using MFC (assuming you are tied to C++ as a language). Try looking at the codeproject MFC sections for example, and perhaps even buy a book to help get you started. This does of course require Visual Studio, but you can download the free express edition here