|
Hi,
I have a SDI application that I wrote in .NET 2005 C++ and in unmanaged code, I have used the ST_SplitterWnd to split the windows, but now what I need to do is, I need to create tabs so that all the views are contained in one, so that I can make another instance of tabs when the next tab is clicked.
Now I have no clue how to do this. Is there anyone else out there that knows how to do this?
Thanks in advance
|
|
|
|
|
You want to use tabs instead of splitters?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mark,
I still want the splitters, but I want say 3 splitters in 1 tab and 2 splitters in another.
|
|
|
|
|
You can use a tab window as the client of the main frame.
Then use frame windows as tab windows and use the splitters in those frame
windows as usual.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Do you by any chance have like a mock example?
Thanks for the help
|
|
|
|
|
For some reason I was thinking MFC, sorry. You can ignore the frame window comments.
I don't have a complete example, Which part is giving you trouble?
You just need to build your window hierarchy the way you want it.
For example:
Create the main window
Create a tab window as a child of the main window. See Tab Controls[^]
Add code to so the tab window gets resized to fit the client area of the main window.
Add tab windows to the tab control
Add code that resizes/repositions the tab windows appropriately within the tabs.
Add splitters to the tab windows.
etc.
etc.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
Hi, Ive made a tab group using a property sheet with property pages. The problem is that when I display the tabgroup/propertysheet, I use the DoModal() command which makes it open in a new dialog box.
I was wondering if it is possible to embed my propertysheet into the main view so that I can have other stuff around it? I dont want it opening in separate dialog box with only the tab group.
Any help will be appreciated.
|
|
|
|
|
You'll need to use a modeless property sheet.
Then you can use the property sheet as a client/child window.
Use Create() instead of DoModal().
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks Mark. I have never used a modeless property sheet but I'll figure it out. I'l post back if i still cant pull it off. Thanks again.
|
|
|
|
|
Hi all,
I faced with an intresting event about GetActiveWindow() method. When I call the code blok below by clicking to a button, I can see the messagebox as "asdasd". But when I call the code blok in a worker thread I cannot see the messagebox.
CWnd *wnd;
wnd = GetActiveWindow();
if(pDlgb == wnd)
MessageBox(_T("asdasd"));
What is the reason for that? Is there any body who can give me an advice about getting the active window in a worker thread?
Thanks,
ibrahim
|
|
|
|
|
Because MFC keeps internal table(s) of (CWnd) windows on a per-thread-basis.
Therefore , the CWnd returned by GetActiveWindow() on a different thread can't possibly
be the same pointer as your pDlgb. It will be a temporary CWnd object also attached to your dialog's
HWND (assuming that window is actually the active window).
Compare the HWNDs instead
if(pDlgb->GetSafeHwnd() == wnd->GetSafeHwnd())
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
It's a little more complicated than that, although it’s true that MFC's handle maps are thread specific. Here’s how MFC implements CWnd::GetActiveWindow :
_AFXWIN_INLINE CWnd* PASCAL CWnd::GetActiveWindow()
{ return CWnd::FromHandle(::GetActiveWindow()); }
Now the following is from MSDN on the ::GetActiveWindow[^] function:
The GetActiveWindow function retrieves the window handle to the active window attached to the calling thread's message queue.
So ::GetActiveWindow is also thread specific, although you could use the AttachThreadInput[^] to get around this.
Steve
|
|
|
|
|
I'm using VS2008 for a MFC application and I'm having some problems
setting text and background color for a Group-box control.
In previous versions of Visual Studio the following code was working:
HBRUSH CMyPrjView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH l_hBrush = CWnd::OnCtlColor(pDC, pWnd, nCtlColor);
int l_iCtrlId;
l_iCtrlId = pWnd->GetDlgCtrlID();
switch(l_iCtrlId)
{
case IDC_STC_GRPBOX_1:
case IDC_STC_GRPBOX_2:
pDC->SetTextColor(RED_COLOR);
pDC->SetBkColor(BLACK_COLOR);
break;
default:
break;
}
return m_cbrshBlack;
}
Now, in VS2008 it doesn't work. I can change all other controls
colors but not for group-box controls. What is changed ?
Is there some properties of the group-box control to be set ?
Or have I to do other things in OnCtlColor ?
Thanks a lot !
|
|
|
|
|
ilgale wrote: Now, in VS2008 it doesn't work.
Are the SetTextColor() and SetBkColor() methods getting called?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Yes, (look at my code in previous message) but it doesn't work!
|
|
|
|
|
I did look at your code, that's why I asked that question. I saw nothing that indicated those two statements were being executed. Saying that something "does not work" could mean that it executed but produced the wrong result, or that it failed to execute altogether.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I got your point....
but I've applied a breakpoint for that calls...
I've already verified that are called without any bad results.
|
|
|
|
|
i want to move a buuton to specific position in property sheet
how to move it
|
|
|
|
|
How about MoveWindow() or SetWindowPos() ?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
ya the problem is i derived a sheet from existing property sheet
those buttons are already in their set positions
some buttons i am hiding and i need to move ok cancel can i move
|
|
|
|
|
Member 4655685 wrote: some buttons i am hiding and i need to move ok cancel can i move
So do it in the sheet's OnInitDialog() method.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
CFileDialog f(FALSE,NULL,NULL,OFN_OVERWRITEPROMPT,"Image Files(*.jpg)|*.jpg|Bitmaps(*.bmp)|*.bmp");
if(f.DoModal()==IDOK)
ShellExecute(NULL, _T("save"), f.GetFileName(), NULL, NULL, SW_SHOWNORMAL);
How to modify this code to save an image?
|
|
|
|
|
CopyFile(/*params*/)
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
Assuming you have the data that represents the image, call CreateFile() followed by one or more calls to WriteFile() .
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|