|
since you have the hBitmap, i suggest you use:
CBitmap::GetBitmap(BITMAP)
the BITMAP structure contains the necessary information you desire...
hope this helps ya
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
the problem i do resize for image
image = ScaleByPercent(image,50);
so image will have a new size , then i saved the image object into IStream object as following :
<code>
CLSID encoderClsid;
GetEncoderClsid(L"image/jpeg", &encoderClsid);
image->Save(pStream,&encoderClsid,NULL);
</code>
any suggestion in getting the scaled image size in bytes.
<b>ScaleByPercent Function</b><code>
Image* ScaleByPercent(Image *imgPhoto, int Percent)
{
float nPercent = ((float)Percent/100);
int sourceWidth = imgPhoto->GetWidth();
int sourceHeight = imgPhoto->GetHeight();
int sourceX = 0;
int sourceY = 0;
int destX = 0;
int destY = 0;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap *bmPhoto = new Bitmap(destWidth, destHeight);
bmPhoto->SetResolution(imgPhoto->GetHorizontalResolution(),
imgPhoto->GetVerticalResolution());
Graphics *grPhoto = Graphics::FromImage(bmPhoto);
grPhoto->SetInterpolationMode(InterpolationModeHighQualityBicubic ) ;
RectF destRectA(destX, destY, destWidth, destHeight);
Unit srcunit = UnitPixel;
grPhoto->DrawImage(imgPhoto,destRectA,sourceX,sourceY,sourceWidth,sourceHeight,srcunit,NULL,NULL,NULL);
return bmPhoto;
}
</code>
|
|
|
|
|
|
Hi all,
I am real desperate here cause there aren't any good documentation regarding the matter...
i am interested to launch windows explorer via code or command line, to be opened in my desired folder, in a 'film strip' mode...
heard i can use IFolderView or other shell objects, but couldn't find any good sample of doing such...
can any1 please show me piece of code on how it can be done?
thanks
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
YaronNir wrote: in a 'film strip' mode...
What's this?
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
if you are using winXP,open My Documents-->My Pictures, choose in the 'View' Menu 'Film strip'
it shows the pictures in a special way, in the bottom, small thumbnails of the picture and in the middle, the selected picture in large...
i want to open such a window programatically (c++ or by command line)
really need help here
thanks
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
|
it comes with winXP sp2....
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
All you have to do is send the SHELLDLL_DefView window a WM_COMMAND message with a command ID of 0x702f.
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
any chance of piece of code?
thanks for all the help
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
|
thanks for the link,
the link refers to OpenFile dialog, and i want to launch 'explorer.exe' (using CreateProcess or ShellExecute or any other method) and then tell it to open in a 'Film strip'
help??
thanks again
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
Had it been anything other than explorer.exe, the answer would have only been five minutes away. However, explorer.exe is different in that it doesn't, by default, start a new application each time. It gets its own thread but within an already existing process. To work around this, a registry change was required. Create the following DWORD key:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"DesktopProcess"=dword:00000001
This code will now open Windows Explorer in 'filmstrip' view:
HWND _hWnd = NULL;
BOOL CALLBACK EnumProc( HWND hWnd, LPARAM lParam )
{
DWORD dwProcessId;
GetWindowThreadProcessId(hWnd, &dwProcessId);
if ((DWORD) lParam == dwProcessId)
{
char szText[256];
if (::GetWindowText(hWnd, szText, sizeof(szText)) > 0)
{
char szClass[256];
GetClassName(hWnd, szClass, sizeof(szClass));
if (lstrcmp(szClass, "CabinetWClass") == 0)
{
_hWnd = hWnd;
return FALSE;
}
}
}
return TRUE;
}
...
DWORD dwError;
BOOL bResult;
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
si.cb = sizeof(si);
bResult = CreateProcess(NULL,
"c:\\windows\\explorer.exe \"C:\\Documents and Settings\\<user>\\My Documents\\My Pictures\\<folder>\"",
NULL,
NULL,
TRUE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&si,
&pi);
if (! bResult)
dwError = GetLastError();
WaitForInputIdle(pi.hProcess, 3000);
EnumWindows(EnumProc, pi.dwProcessId);
HWND hWnd = FindWindowEx(_hWnd, NULL, "SHELLDLL_DefView", "");
if (hWnd != NULL)
::SendMessage(hWnd, WM_COMMAND, 0x702f, 0); Obviously this solution has a few shortcomings but I think you get the general idea. I think that FindWindow() can also be used to find the "CabinetWClass" window.
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
I just posted an article about automating Internet Explorer and Explorer on Codeproject (http://www.codeproject.com/shell/AutomateShellWindow.asp).
To switch to 'Film Strip' mode, use IFolderView::SetCurrentViewMode with FVM_THUMBSTRIP. IFolderView can be QIed from the active shell view in explorer.
My blogs:
http://blog.joycode.com/jiangsheng
http://blog.csdn.net/jiangsheng
http://bloglines.com/public/jiangsheng
Command what is yours
Conquer what is not
---Kane
|
|
|
|
|
Hi JIANG,
thanks for the reply...
i've looked eariler at your code posted here...tried to simulate it but didn't get much luck..
can you copy and paste bits of your code here to answer my quiz
all i need to do is open explorer in a certain directory and then switch it to film strip view
an easiest approach for me would be to write something like this:
using shellexecute , "explorer.exe /n,c:\.....\MyFolder"
and then set a registry key that customize this folder to 'filmstrip'
i've been shown by DavidCrow where the windows store this customization, all i have to look for now is how the system find the folder according to the number in the registy...
can u help there?
thanks again
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
YaronNir wrote: and then set a registry key that customize this folder to 'filmstrip'
Look at the Vid and Mode values.
Details:
"Vid"="{137E7700-3573-11CF-AE69-08002B2E1262}"
"Mode"=dword:00000004
Icons:
"Vid"="{0057D0E0-3573-11CF-AE69-08002B2E1262}"
"Mode"=dword:00000001
List:
"Vid"="{0E1FA5E0-3573-11CF-AE69-08002B2E1262}"
"Mode"=dword:00000003
Thumbnails:
"Vid"="{8BEBB290-52D0-11D0-B7F4-00C04FD706EC}"
"Mode"=dword:00000005
Tiles:
"Vid"="{65F125E5-7BE1-4810-BA9D-D271C8432CE3}"
"Mode"=dword:00000006
Filmstrip:
"Vid"="{8EEFA624-D1E9-445B-94B7-74FBCE2EA11A}"
"Mode"=dword:00000007
YaronNir wrote: i've been shown by DavidCrow where the windows store this customization, all i have to look for now is how the system find the folder according to the number in the registy...
After looking at the HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\BagMRU key and its subkeys, I can only guess it's some sort of hashing algorithm.
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
well, you're correct, the FilmStrip is indeed 8EEFA624-D1E9-445B-94B7-74FBCE2EA11A
but i still can't figure it out what is the connection between the number and the refered directory ?
i think an easier solution to my entire problem would be just call shell execute with
"explorer.exe /n,"c:\.....\my folder"
and then set a registry key (the right one - that fits to this folder) with the filmstrip mode
(i.e. Filmstrip:"Vid"="{8EEFA624-D1E9-445B-94B7-74FBCE2EA11A}""Mode"=dword:00000007 )
help????
thanks again
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
<code>
//my sample code from http://www.codeproject.com/shell/AutomateShellWindow.asp
CComQIPtr<IServiceProvider> psp(m_pWebBrowser2);
CComPtr<IShellBrowser> psb;
CComPtr<IShellView> psv;
if(psp)
psp->QueryService(SID_STopLevelBrowser,
IID_IShellBrowser,(LPVOID*)&psb);
if(psb)
psb->QueryActiveShellView(&psv);
if(psv)
{
//new code here
CComPtr<IFolderView> pfv(psv);
if(pfv) pfv->SetCurrentViewMode(FVM_THUMBSTRIP);
//end new code
</code>
My blogs:
http://blog.joycode.com/jiangsheng
http://blog.csdn.net/jiangsheng
http://bloglines.com/public/jiangsheng
Command what is yours
Conquer what is not
---Kane
-- modified at 14:11 Tuesday 15th November, 2005
|
|
|
|
|
thanks for the reply
the above code doesn't compile due to
CComPtr<IFolderView> pfv(psv);
i use VC7 DOTNET 2003....
any suggestion?
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
CComPtr<ifolderview> pfv(psv);
I'v modified my post and removed HTML formating.
My blogs:
http://blog.joycode.com/jiangsheng
http://blog.csdn.net/jiangsheng
http://bloglines.com/public/jiangsheng
Command what is yours
Conquer what is not
---Kane
|
|
|
|
|
I've used a similar code taken from a page here at code project....
this code doesn't work because when i create new explorer.exe process (and since the registry new entry tells the explorer to be opened in a new process), i see an other explorer.exe in memory,
the enumproc does find it but the class name of the new explorer process is 'Desktop Proxy' (that is what GetClassName returns) only after the window is being show the spy++ tells that the class name is 'CabinetWClass'....
dunno why system works that way....
any thoughts?
really appreciate all your help!
cheers
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
YaronNir wrote: I've used a similar code taken from a page here at code project....
Which article are you referring to?
YaronNir wrote: this code doesn't work...
That's too bad as it worked fine for me.
YaronNir wrote: any thoughts?
Are you giving the new window enough time to be created before calling EnumWindows() ?
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
DavidCrow wrote: Which article are you referring to?
http://www.codeproject.com/shell/AutomateShellWindow.asp (it was one of the replies to this thread)
DavidCrow wrote: That's too bad as it worked fine for me.
how come? which system? xp? with sp? 1 ? 2?
DavidCrow wrote: Are you giving the new window enough time to be created before calling EnumWindows()?
tried to give it 3 to 5 seconds interval.....i use WaitForInputIdeal...
any thoughts?
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|
|
YaronNir wrote: which system? xp? with sp? 1 ? 2?
Windows XP with SP2.
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
Finally i've solved the problem
it appeared to be that if i launch web browser (using IWebBrowser2) and set it to my desire
folder, it presents the folder automatically in FilmStrip mode....
so all i had to do is this:
CString szFilesDir(_T("c:\\windows\\system32\\MyDir"));
CComVariant vaURL( ( LPCTSTR) szFilesDir);
CComVariant vtEmpty;
IWebBrowser2Ptr spWB = NULL;
HRESULT hr = spWB.CreateInstance(CLSID_InternetExplorer);
hr = spWB->put_StatusBar(VARIANT_TRUE);
hr = spWB->put_ToolBar(VARIANT_TRUE);
hr = spWB->put_MenuBar(VARIANT_TRUE);
hr = spWB->put_Visible(VARIANT_TRUE);
hr = spWB->Navigate2(&vaURL,&vtEmpty,&vtEmpty,&vtEmpty,&vtEmpty);
thank you very much both of you, for all your help!!!
Yaron
Ask not what your application can do for you,
Ask what you can do for your application
|
|
|
|