|
I'm trying to print the file using ShellExecuteEx()
but for some of the files need file's associate .exe to set before ShellExecuteEx() get called.
So I want to set the fiel associate .exe ( same as "open with") programmatically.
So I search...
I found out I can set the registry as
[code]
Use the Registry functions to access the registry.
HKEY_CLASSES_ROOT\.ext\(Default) contains the type of file you are looking for. Then accessing
HKEY_CLASSES_ROOT\fileinfo\Shell\Open\Command\(Def
ault) where fileinfo is the value that was specified in the first registry key I mentioned.
[/code]
but I don't know where to get HKEY_CLASSES_ROOT..
I don't know how and where to set HKEY_CLASSES_ROOT
I also used [code]
CString finename = "abc.txt";
CString path = "C:\";
LPTSTR fn = (LPTSTR)(const char*)filename;
LPTSTR p = (LPTSTR)(const char*)path;
LPTSTR r;
::FindExecutable(fn,p,r);[/code]
but I got run time error at FindExecutable()..
Lets say, if FindExecutable is returning r, (in this case r = "c:\program files\notepad.exe", which contains the file name with Rath name... ,, then what should I do... what if r is empty...???
Thanks
|
|
|
|
|
If you are using ShellExecuteEx , then it handles finding the associated application for you. Just specify the name of the document and set the verb to "print". If the document has an associated application, and the application supports the print verb, that should do it.
Software Zen: delete this;
|
|
|
|
|
I know about it.. but what if the documents doesn't have associated applicaiton, print verb??
How can I set the associated application programatically??
|
|
|
|
|
If the document type does not have an associated application, then you need to do one of two things, both of which require the same information.
First, you could create an association for the document type. This requires that you know the path to the application and the command line syntax used for printing. You must also create the association in the registry.
On the other hand, since you know the path to the application and the command line syntax for printing, you could simply use CreateProcess and run the application directly. This is easier than the first approach, since you don't have to mess with the registry and establish the association.
If you don't know the path to the application, or you don't know the application's command line syntax for printing, then neither of these approaches will work.
Software Zen: delete this;
|
|
|
|
|
Thanks for your reply Gary. I was looking for information to do so... and found out that I have to used RegOpenkey()..something like that. but don't really have the idea of using it..
Would you please tell me how to create the asociation in the registry?
|
|
|
|
|
|
I don't use WinAmp, but I have seen screen grabs of some of the skins for it. The thing that catches my eye is the reflective screen does not get lost by drawing the text/controls that are supposed to be beneath it. Is this done by using something like AlphaBlend()? Maybe WinAmp requires DirectX? Any ideas what they are using to implement the drawing? I'm not talking about creating my own skin for WinAmp - I'm talking about the code used to implement the skinning.
|
|
|
|
|
I've never done this, but don't you think that would be easier to make all the controls owner drawn and that all those controls load the images that must show from one/some external and easy configurable resource file?
|
|
|
|
|
Thanks for the reply,
Skinning applications usually ask you to provide a series of image files, and a configuration file (.ini) that helps the program put them all together.
The most interesting part for me is the actual code used to take the static image (somtimes looks like a LCD screen depending on the skin), and draw dynamic text, images to make it look as though they are beneath this static image. There must be some kind of blending happening, but I don't know what they are using to do this.
|
|
|
|
|
Dave_ wrote:
Is this done by using something like AlphaBlend()?
Dunno, but I do know that if it runs on W95 they will have rolled their own, as it is not available there. I did the same, it was my first WDJ article and is still online. As for skinning, search for 'skin mpeg' here on CP and you'll find an mp3 player that is skinnable.
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
Thanks Christian,
Your article is actually the one that started me on this path. Do you know where I might be able to find some info on how to do a blend? I don't mind doing the research, and attempting to implement this myself but I would really hate to go through all of this if someone (on codeproject) already knows more about it.
The main reason why I think I would need to do this myself (instead of using AlphaBlend()) is due to the fact that NT, and other O/S's don't have the ability without having to redistribute files,...
I guess what I am looking for is someone who has some low-level graphics knowledge, and can tell me a little about the process.
Thanks again - great article - very informative/inspiring.
|
|
|
|
|
Do you mean my WDJ article, or something I wrote here ? My WDJ article impliments a replacement for AlphaBlend, and you should use that, even if you don't have OS worries. Mine don't leak memory......
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
Oops, sorry - I read through your reply too fast. I was talking about the mpeg app. I will see if I can find your article.
Thanks again.
|
|
|
|
|
The article is here:
http://www.windevnet.com/documents/s=7628/wdj0109b/0109b.htm[^]
but the code that was published was an early version and leaks memory ( this was my first ever non-MFC Windows code and I took a few tries to figure it all out ). The ammended code is here:
http://www.windevnet.com/documents/s=7255/wdj0111j/0111j_l1.htm[^]
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
Is it possible to call a specialized function of a base class ?
I mean:
class A
{
protected:
virtual int f() { return -1; };
public:
void DoFunc() { printf("\nValue: %d",f()); };
};
class B : public A
{
protected:
virtual int f() { return 1; };
};
int main()
{
B Inst;
Inst.DoFunc();
}
pure virtual function does not help because the MFC macro IMPLEMENT_DYNCREATE makes the
compiler think it get instantiated.
Is it possible to get the class A to print 1 instead of -1 ?
|
|
|
|
|
This code should print 1. I went as far as to try it myself and it does.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
I didnt know of that.
I always thought the function of the current namespace would be used.
Just tested it. It works. cooool
Thanks
|
|
|
|
|
No problem. That's what the virtual keyword is for, in front of your f() function. I suggest you read up on it.
Regards,
Alvaro
Well done is better than well said. -- Benjamin Franklin
(I actually prefer medium-well.)
|
|
|
|
|
You mean?
A.DoFunc() == 1
No, class A knows nothing about class B.
B on the other hand knows about A because it is derived from it.
|
|
|
|
|
I wrote Inst.DoFunc() in the example.
This was not obvious to me. Inst.DoFunc() does indeed ignore f() member
in class A and uses the derived f() from B.
|
|
|
|
|
If it is public or protected it will work.
Jason Henderson start page ; articles
henderson is coming
henderson is an opponent's worst nightmare
* googlism *
|
|
|
|
|
You should have a new public (not private or protected) member function in class B, inside which you would call A's DoFunc() function...
There are no failures; there are only extended learning opportunities.
|
|
|
|
|
If you want to guarantee that the base class version will be called, rather than a virtual one from a derived class, you can do the following:
class A
{
protected:
virtual int f() { return -1; };
public:
void DoFunc() { printf("\nValue: %d",A::f()); };
};
Software Zen: delete this;
|
|
|
|
|
Hello!
After some fights with the taskbar at last I've been able to resize windows properly...
- If I use ShowWindow(SW_MAXIMIZED); then the window first appears on the normal workarea (up the taskbar) and then it gets well positioned all over the full screen (flickering).
- If I use:
<br />
this->SetWindowPos(&wndTopMost,0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN),SWP_SHOWWINDOW);<br />
this->ShowWindow(SW_SHOWMAXIMIZED);<br />
then the window is displayed properly and it gets maximized, but I can continue moving it.
PS:
it only don't work under win2k... unfortunately it's the OS in which the app must be installed.
Is there any way to make a window stay at the place in which I've left it?
thank you very much for your help!
|
|
|
|
|
You can do this:
Add the following to your message map:
ON_WM_NCLBUTTONDOWN()
Add the following to the //{{AFX_MSG section of the window header:
afx_msg void OnNcLButtonDown( UINT nHitTest, CPoint point );
Implment the following:
void CYourWindow::OnNcLButtonDown( UINT nHitTest, CPoint point )
{
}
When I did this, the window could not be dragged......
But, you'll need to do some work to get the caption buttons and system menu buttons to work......But this is a start......
Just trying to keep the forces of entropy at bay
|
|
|
|