|
I want to make a toolbar type window that has owner drawn button controls on it. I also need to be able to "stack" them on one side, either left or right, but those are two different issues.
Figure 1
is the application I’m trying to mimic and I know it was written in Qt. notice the controls across the top of the main window and to bars across each view on either side of the splitter. I believe it should be possible to design a bar that I could use in all three places with little modification.
Figure 2
is what I can figure to be the window structure I should use.
Please how would you implement the toolbar I described?
Thank you,
Nathan
|
|
|
|
|
Are you using MFC?
If so, I personally use a CControlBar-derived class.
Overriding CalcFixedLayout/CalcDynamicLayout makes it easy to position
any controls (and/or individual CToolBars) and report the total size of
the bar to MFC.
There's also the CDialogBar if you prefer to work with a dialog resource
as a control bar.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
What would be the best way to make that CControlBar-Derived class the full width of it's parent.
|
|
|
|
|
Nathan Going wrote: What would be the best way to make that CControlBar-Derived class the full width of it's parent.
I don't know the best way, but I use something like this:
CSize CMyControlBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
{
CRect ParentClientRect;
GetParent()->GetClientRect(&ParentClientRect);
int desiredheight = ...;
return CSize(ParentClientRect.Width(), desiredheight);
}
CSize CMyControlBar::CalcDynamicLayout(int nLength, DWORD dwMode)
{
return CalcFixedLayout(dwMode & LM_STRETCH, dwMode & LM_HORZ);
}
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
i have two dlgs which i want to access the same variable,
i,ve got some global variables in the "Globals" folder but i cant access them from the childdlg.
i thought global was GLOBAL?
how to do this easy.
thx
|
|
|
|
|
If the variable is in the parent window which create the dialog
you can use GetParent() method to get the parent window , and make sure your global variable is declared in parent header with public access.
Vikas Amin
My First Article on CP" Virtual Serial Port "[^]
modified on Thursday, July 24, 2008 5:33 PM
|
|
|
|
|
thanx i'll look into that
|
|
|
|
|
rolfhorror wrote: i,ve got some global variables in the "Global" folder
Really? I'm not the most experienced developer around but I'm pretty sure you can't put variables into folders.
rolfhorror wrote: how to do this easy.
If you don't understand that those Dialogs are Classes and/or if you don't understand how to pass/access variables between classes then my guess would be that this might be the easiest.[^]
led mike
|
|
|
|
|
when i say folder, i mean the "folder" at the bottom on the classtree with the name "Globals".
|
|
|
|
|
rolfhorror wrote: maybe you should look at that book yourself
Good one! You are well on your way to being an excellent C++ developer! Good luck.
led mike
|
|
|
|
|
i'm not here to flame, so no offense. it was all in good humor.
(by the way, i have that book)
|
|
|
|
|
rolfhorror wrote: i'm not here to flame, so no offense. it was all in good humor.
rolfhorror wrote: (by the way, i have that book)
Then my comment about the dialogs being classes and that standard mechanisms for passing values or accessing values applies, should have helped yes? I mean I have not read that book but I would imagine that is covered yes?
led mike
|
|
|
|
|
thanx for you help
|
|
|
|
|
just a guess, have you checked this[^] article ?
|
|
|
|
|
thanx, this is what i was looking for
|
|
|
|
|
it it is integer, than you can use PostMessage to tranfer values in active mode. since other wise just update the shared values for passive mode transfer.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You/xml>
|
|
|
|
|
I've got a shell extension dll that can't be registered - regsvr32 fails with exit code 0x3 (this happens on a 64-bit Vista), but I can't understand what the exit code means. Does anyone know what might be the problem and what this exit code means?
And this problem doesn't happen in XP 32-bit (my development machine).
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
modified on Monday, August 18, 2008 1:31 PM
|
|
|
|
|
Do you have a DllRegisterServer() function?
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
Yes, it is a ATL/COM shell extension, with MFC support enabled. It was done by following this article from codeproject - http://www.codeproject.com/KB/shell/shellextguideindex.aspx[^]
I forgot to mention that the problem *doesn't* happen in XP 32-bit (my development machine).
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
sashoalm wrote: Yes...
And what does it return?
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
DllRegisterServer is just boilerplate code put by AppWizard, and it returns _Module.RegisterServer(TRUE). Btw, I also have a *.rgs file. Could something be wrong there?
STDAPI DllRegisterServer(void)
{
return _Module.RegisterServer(TRUE);
}
Actually the entire file is boilerplate, I haven't changed a line of code there I think.
Here's the code:
#include "stdafx.h"
#include "resource.h"
#include <initguid.h>
#include "ExplorerExt.h"
#include "ExplorerExt_i.c"
#include "ExplExt.h"
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
OBJECT_ENTRY(CLSID_ExplExt, CExplExt)
END_OBJECT_MAP()
class CExplorerExtApp : public CWinApp
{
public:
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CExplorerExtApp, CWinApp)
END_MESSAGE_MAP()
CExplorerExtApp theApp;
BOOL CExplorerExtApp::InitInstance()
{
_Module.Init(ObjectMap, m_hInstance, &LIBID_EXPLOREREXTLib);
return CWinApp::InitInstance();
}
int CExplorerExtApp::ExitInstance()
{
_Module.Term();
return CWinApp::ExitInstance();
}
STDAPI DllCanUnloadNow(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return (AfxDllCanUnloadNow()==S_OK && _Module.GetLockCount()==0) ? S_OK : S_FALSE;
}
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _Module.GetClassObject(rclsid, riid, ppv);
}
STDAPI DllRegisterServer(void)
{
return _Module.RegisterServer(TRUE);
}
STDAPI DllUnregisterServer(void)
{
return _Module.UnregisterServer(TRUE);
}
</initguid.h>
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Perhaps some required runtime DLL is missing. Use Depends[^] (or some other tool that does something similar) to see if this is the case.
Steve
|
|
|
|
|
thanks for the advice, I checked it, and there was one warning, and two files had red icons to the left.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.<br />
<br />
c:\windows\system32\SHLWAPI.DLL<br />
c:\windows\system32\IEFRAME.DLL<br />
btw at first i had checked it with 32-bit version of depends, and it gave different results even though it managed to launch on the 64-bit Vista.
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|