Implementing the IExtractImage COM interface - windows

I see a lot of references to IExtractImage when researching how to generate thumbnails in explorer, and I cannot use the new API which is Vista/7 only as the target OS is XP.
Almost all the results I've found talk about using IExtractimage to acquire thumbnails, not implementing IExtractImage to create them. I don't want to retrieve thumbnails, I want to make them so that i can display a custom image format in windows explorer.
Those that do talk about what I want to do, give no examples, dont tell me how I would implement the IExtractImage object and tell me nothing about the APIs to use to actually draw to the thumbnail, and normally reference msdn articles which give 404 not found results.
I'm using c/c++

You want to implement IExtractImage (or IExtractImage2) and register it as a shell extension. A good article on this on CodeProject: http://www.codeproject.com/KB/shell/thumbextract.aspx

Related

Multiple "panes" view in single document Windows application

I'm trying to write an editor for game scenes. So far, I'm able to present results in a single window. However, I would like to have several "panes", for example for material properties or resources preview.
The good example would be Blender layout:
I know MFC and WinAPI, I wouldn't rather use Qt, since it's not free.
I did it on a commercial application and it works fine:
Create a Single Document application
Read about CDockablePane, then look into the MFC Feature Pack exanples.
Finally implement the CDockablePanes and their contents
Arrange them the way you want by docking them to your own CFrameWndEx-derived class.

How do I write a custom search provider for Windows Explorer search UI

I am working on a Windows Explorer Namespace Extension which is a virtual filesystem. With regards to this, I would like to support search from the search dialog available in Windows Explorer.
Currently I'm able to search by name in the folder I'm standing in, but I would like to be able to search in the complete structure and also within content of the virtual filesystem, and since Windows Explorer cannot do this, I need to hook in a custom search provider.
Since it is a virtual filesystem, it would be beneficial if I could write a custom UI for displaying the result, but this isn't mandatory.
The custom Explorer namespace extension is written in C#, but the API doesn't need to be wrapped. Any pointers to API documentation, commercial products and/or samples would be appreciated.
If you are using defview as your shell view, return FWF_USESEARCHFOLDER in IFolderViewSettings::GetFolderFlags. Sample implementation can be found at http://regnamespace.codeplex.com/.
From http://msdn.microsoft.com/en-us/library/bb331575(v=vs.85).aspx :
If your IShellFolder implementation does not use SHCreateShellFolderView to create the DefView, the Shell view object may need IFolderView.
There is also confused user who need to support shell namespace extension folder searching in file dialogs.

How to approach implementing a layout editor using Cocoa

I want to build an OS X application, in which one of the requirements is for the user to be able to generate PDF output according to a layout that they, the user, will create. Typical items on the page would be things like a corporate logo (a JPEG or PNG), an address (a block of text) and a narrative (another block of text).
I'd like the user to be able to move and resize the items using the mouse to drag handles around on-screen.
Is there an Interface Builder object that will let me do that, or some third-party library that exists for this purpose?
Try GCDrawKit if you're looking for a drop-in solution. It's still in beta (and has been for ages) but you might find it useful.
You seem to be looking for an all-encompassing, self-contained "Pages" control or some sort of reporting suite. That's asking a bit much.
There is nothing in the Cocoa frameworks that gives you this. Unfortunately, there's no Cocoa equivalent of Crystal Reports either. You'll have to roll your own.
I suggest using standard CSS / HTML templates with WebKit. The only drawback is WebKit doesn't yet support CSS pagination, so there's no concept of "8.5"x11" page 1...15" but it's the closest you'll come without writing your own Pages application (NOT an easy project by any stretch of the imagination).

How to customize the windows shell to display files from a remote source and allow custom drawing?

Is it possible, (via some shell extension or similar) to customize the Windows shell (explorer.exe) to accomplish the following?
Make it, upon navigating to a predefined path:
draw over its surface - custom background, or even add custom forms for data input
display custom listview items based on the "virtual" path provided (something analogous to what explorer is doing when browsing a FTP repository - the items shown are not contents of a local folder, but rather some "virtual" items physically located on the FTP server)
The idea is to reuse the visage and navigation elements of Explorer without re-implementing the whole functionality and make it look native on all Windows versions for a remote file browser (file lists+files alone served by a custom web service).
I think you need to implement a Explorer Namespace Extension. There is some good information floating around on codeproject etc that you will probably need since the official documentation is not the best.

How can I filter by file type in an IExplorerBrowser in Windows 7 Libraries?

I've created an instance of IExplorerBrowser in my code to create a custom I/O view in one of my dialogs. I've implemented the IServiceProvider and ICommDlgBrowser interfaces in my host class. I use the IExplorerBrowser::BrowseToIDList method to fill the view.
I would like to filter the file types displayed (ex. only PNG files). If I call BrowseToIDList with FOLDERID_Pictures (i.e. "My Pictures") I can use the ICommDlgBrowser::IncludeObject method or IFolderFilter::ShouldShow to restrict which files I allow to be displayed. However, if I browse to the Picture Library on Windows 7 (FOLDERID_PicturesLibrary), neither ICommDlgBrowser::IncludeObject nor IFolderFilter::ShouldShow are ever called.
Is there some limitation to filtering files in libraries on Win7 that I'm unaware of? Perhaps I'm missing an interface or maybe I've specified the wrong flag somewhere.
Any ideas would be greatly appreciated.
I've had a chance to research this further, including asking a few questions to some Microsoft developers. It would appear, unfortunately, that filtering does not work with query backed views (i.e. Libraries).
An alternative to my approach would be to use the Common Item Dialog with application added controls (via IFileDialogCustomize).
(http://msdn.microsoft.com/en-us/library/bb776913(VS.85).aspx)
In my specific case, I'm unable to use a Common Item Dialog, but I thought it might be worthwhile to post this information here for future reference.
If in the future I find any way to filter an IExplorerBrowser control, I'll post that back here too.
I encountered this issue myself.
Yet I have investigated it a little bit further. IExplorerBrowser creates (on my Windows 7 x64 machine) window of ExplorerBrowserControl class. Which itself creates a window of DUIViewWndClassName class. And the very same window (DUIViewWndClassName) is used as a control by dialog created by IFileOpenDialog. Even window procedures are same so there is no subclassing (but I haven't checked each and every subwindow of that control).
And file dialogs are able to filter by file type even in the library folders. So I guess the IExplorerBrowser (or the control it uses) does allow that only Microsoft does not share knowledge how to do that. Or if it does then its somewhat hidden knowledge.
But I got it with IFolderFilterSite (interface supported by IExplorerBrowser from CLSID_ExplorerBrowser). IFolderFilter::ShouldShow isn't called in such cases for library folders. I wasn't able to get ICommDlgBrowser::IncludeObject called (even if I didn't set any IFolderFilter).
EDIT: I managed to get ICommDlgBrowser::IncludeObject called. Somehow I forgot that I have to provide ICommDlgBrowser through IServiceProvider::QueryService rather than through IUnknown::QueryInterface. But still ICommDlgBrowser::IncludeObject is not called for library folders.
I tried using IShellFolderViewDual3->FilterView().
But it's search results.
Thank you.
IShellView *pShellView;
IDispatch *pDSFV;
IShellFolderViewDual3 *pSFVD3;
m_pExplorerBrowser->GetCurrentView(IID_PPV_ARGS(&pShellView));
pShellView->GetItemObject(SVGIO_BACKGROUND, IID_PPV_ARGS(&pDSFV));
pDSFV->QueryInterface(IID_PPV_ARGS(&pSFVD3));
pSFVD3->FilterView(bstrVal);

Resources