|
Has anyone come across code for a file/folder selector dialog?
I want to mimic the standard file open dialog, but want to also allow the user to end the dialog by simply selecting a folder. If I came across a tree combo box that displayed the shell's folder hierarchy, I'd craft the dialog myself. Imho, the hard part is implementing the tree combo.
Thanks,
/ravi
"There is always one more bug..."
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
I normally don't like giving codeguru links but there are a bunch on codeguru on of them :-
http://www.codeguru.com/dialog/DirDialogPhillips.shtml
|
|
|
|
|
Thanks Rama! The sample was extremely close to what I wanted. Here's a link (an article by none other than good old PJL) that implements it completely:
http://msdn.microsoft.com/msdnmag/issues/02/01/c/c0201.asp
Thanks again!
/ravi
"There is always one more bug..."
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
Ravi Bhavnani wrote:
/ravi
"There is always one more bug..."
http://www.ravib.com
ravib@ravib.com
Ravi,
I seriously think it's time to change your sig.
It's been here in its static I-won't-change manner for too long.
Nish
My miniputt high is now 29
I do not think I can improve on that
My temperament won't hold
www.busterboy.org
|
|
|
|
|
My good fellow, that .sig has been with me since 1987! How can I change it now?
<aside>
My car is 11 years old, my VCR is 17, and my speakers are 20. All the furniture in my house is 16+ years old. That being said, everything is of high quality, in mint condition and works flawlessly. The only thing that changes is my PC.
</aside>
Note to prospective geekette life partner:
Candidate is resistant to change (also see "obstinate", "pertinacious" and "mulish") and should only be experienced in small doses.
/ravi
"There is always one more bug..."
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
|
Colin Davies wrote:
You realise that sig is older than some CPians now !
Frightening thought, wot?
/ravi
"There is always one more bug..."
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
|
Thanks Mike, I overlooked that! Unfortunately, the selection dialog I have to implement requires the functionality of the standard file open dialog (back, up, create new folder, etc.), so I think I'm going to go the PJL way.
/ravi
"There is always one more bug..."
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
Been reading up on doing a win32 skin, and I can do it great in a standard win32 app. But now I try to do it in an MFC doc/view app and it doesn't quite work the same. I have a bitmap in my resource file, and I create a CBitmap from it. I can BitBlt it from the OnDraw function, but it will only draw in the view area... Not the whole app. How can I get it to draw over the entire application? Here is my current code that I'm using:
void CSkinTestView::OnDraw(CDC* pDC)
{
CSkinTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC memdc;
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject((HBITMAP)m_Skin);
pDC->BitBlt(0, 0, 200, 75, &memdc, 0, 0, SRCCOPY);
}
m_Skin is a CBitmap variable that is created and grabs the bitmap from the resource in PreCreateWindow(). What can I change? I tried putting this type of thing in the Mainframe's paint call, but get all kinds of fun errors... Any sugggestions?
Programming in binary is as easy as 01 10 11.
|
|
|
|
|
Perhaps GetWindowDC is what your looking for...?
The returned device context will let you draw on the entire window, not just client area.
Cheers!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
OnPaint and OnDraw are intended for drawing client windows only, and as such the DC's provided clip to the client window.
If you're skinning an app, you'll want to use a combination of handlers for the following messages:
WM_ERASEBACKGND
WM_NCPAINT
WM_NCSIZE
etc.
Sorry to dissapoint you all with my lack of a witty or poignant signature.
|
|
|
|
|
First question is...when using malloc to allocate memory and _msize to retrieve the size in a Release build, the value _msize returns, and also the value stored in the memory block header is rounded up to the nearest multiple of 8 (i.e. 7 is rounded to 8, 100 is rounded to 104, etc). This is not the case in a Debug build. Is there any way to tell the heap manager not to round up? It wouldnt even be so bad if it allocated the rounded up number of bytes, but as it is, if I tell malloc to allocate 100 bytes, it allocates 100 bytes and then tells me it allocated 104, and that isnt good for so many reasons.
Next question is...when you use new to allocate an array of structures, such as...
CMyClass *pVar = new CMyClass[count]
I have one program which will add 4 bytes to the size passed to the new operator, and store count in those 4 bytes, and I have another program in which it does not do that. Is there a way to turn this functionality on or off? It must be some compile time setting, because in the program where it does that, there is an 'add 4' assembler instruction right before the call to new.
Thanks a bunch in advance to whomever can answer these 2
-Jesse
|
|
|
|
|
Jesse Rosalia wrote:
First question is...when using malloc to allocate memory and _msize to retrieve the size in a Release build, the value _msize returns, and also the value stored in the memory block header is rounded up to the nearest multiple of 8
malloc attempts to allocate a buffer that is at least the size that you asked for, it may allocate a block that is larger that the requested size. So there is really nothing that you can do about the size rounding.
In your question about new, is the object that you are allocating memory for the same object in both programs?
|
|
|
|
|
No, I was using different objects in the 2 different programs...but I think Ive all but answered all the questions I had with that through good ol fashion research and dumb luck . As for the malloc issue...it doesnt, in my experience, actually allocate the rounded up size in bytes...it allocates what you tell it to, and then reports that it allocated the rounded up size. Am I missing something, or do I need to have something defined somewhere to make this work properly?
Thanks for your response, by the way
-Jesse Rosalia
|
|
|
|
|
It is actually the case that malloc can allocate a larger block. This is a common technique used to increase memory allocation speed. You have a quick allocation lists for specific memory ranges. Such as 0-32 bytes uses one queue, 33-64 uses another queue, etc...
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
Ahhh hah!...Thanks for your reply...as I was formulating a response to this it dawned on me that I never tried to allocate the memory to its prefered size, and check the headers and footers then...in fact you are correct that it does allocate the reported size. This also brought an interesting quirk with calloc to my attention...it will write 0s to the requested size, not the allocated size...very confusing. Thanks for your help...I think I have a good grip on this stuff now.
-Jesse Rosalia
|
|
|
|
|
Can you please help me out on the below problem.I am in short of time and sorry if this type of question has been posted previously.
I want to display a message box when the windows XP system is about to shutdown and the user must respond to it.I am displaying the message box[with flags MB_TOPMOST|MB_SETFOREGROUND|MB_SERVICE_NOTIFICATION|MB_OKCANCEL] from service.I can do this successfully but what is happening is say after 5 seconds if the user doesnot respond then OS is displaying a message box like "Could not terminate or kill the program,user has to respond to the application".
1.How can i avoid the above message box coming from the system.
2.I see some of the applications in the system tray getting closed in the meanwhile, i mean how can my application[service] be the first to trap WM_QUERYENDSESSION.Is there any other simple approach other than HOOKS.Basically if the user does a cancel from the message box, i have to make sure system is in normal state like before shutdown.
Sincerely,
Suren
|
|
|
|
|
1. To avoid the message, close the message box. You will probably need a second thread to kill the app after a time out. You may want to consider using a custom dialog rather than a message box. Then you can control its duration from inside.
2. I don't know of any way to effect the order in which the apps receive messages. There is no way to re-instate other apps that have already shut down, unless you're program knows what they are and how to restart them.
|
|
|
|
|
Cancel the shutdown programatically. If OK is hit then tell XP to shutdown, otherwise do nothing.
Joel Lucsy (jjlucsy@ameritech.net)
|
|
|
|
|
Hi guys,
I've been messing around with the Hello World example program and what I'm wanting is that when the user goes to the "about" screen the main window is closed or made invisible. Sorry if it such a vague qeustion, I've only been on VC++ for 5 hours now and I'm a bit strapped for cash for books at the moment Any help would be great
Thanks for your time
Aaron
|
|
|
|
|
Check ShowWindow(() ,use SW_HIDE
for it.
Mazy
"So,so you think you can tell,
Heaven from Hell,
Blue skies from pain,...
How I wish,how I wish you were here." Wish You Were Here-Pink Floyd-1975
|
|
|
|
|
In the "About" handler (where the about dialog is created and shown with DoModal issue a ShowWindow(SW_HIDE) before producing the about dialog and ShowWindow(SW_SHOW) after
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
when you say 'main window' do you mean the whole application, or a dialog which says 'Hello World'.. if you are displaying a dialog using DoModal() then it will have focus and not allow you to go to help/about until you close the box that has focus.. please elaborate on exactly what you want closed or made invisible.
-dz
|
|
|
|
|
But he can hide the window before the DoModal and show it when DoModal returns
Nish
My miniputt high is now 29
I do not think I can improve on that
My temperament won't hold
www.busterboy.org
|
|
|
|