Solved

Dialog Fullscreen question

Posted on 2009-05-15
5
448 Views
Last Modified: 2013-12-27
I have a windows mobile app writen using MFC in VS2005.  I have made all my dialogs fullscreen using the following:
BOOL CMyClass::OnInitDialog()
{
      SHINITDLGINFO shidi;
      shidi.dwMask = SHIDIM_FLAGS;
      shidi.dwFlags =SHIDIF_FULLSCREENNOMENUBAR;
      shidi.hDlg = m_hWnd;
      ::SHInitDialog(&shidi);
      SetForegroundWindow();
      SHFullScreen( m_hWnd, SHFS_HIDESTARTICON|
      SHFS_HIDETASKBAR|
      SHFS_HIDESIPBUTTON );

      MoveWindow(0,0,240,320,TRUE);

      HWND hWnd;
      hWnd = ::SHFindMenuBar(this->m_hWnd);
      ::ShowWindow(hWnd, SW_HIDE);
}

AND
void COptions::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
     CDialog::OnActivate(nState, pWndOther, bMinimized);

     SHFullScreen( m_hWnd, SHFS_HIDESTARTICON|SHFS_HIDETASKBAR|
                                                SHFS_HIDESIPBUTTON );

     MoveWindow(0,0,240,320,TRUE);

     HWND hWnd;
     hWnd = ::SHFindMenuBar(this->m_hWnd);
     ::ShowWindow(hWnd, SW_HIDE);

}

But I am having a problem with one of my dialogs which contains a tab control with 3 tabs.  In each tab I have a seperate dialog and I place each one like so:
//Tab Options
     dlgTab1Dlg = new CTab1(this);
     dlgTab1Dlg->Create(IDD_TAB1_DIALOG, this);
     dlgTab1Dlg->SetParent(&m_tabOptions);
     dlgTab1Dlg->ShowWindow(SW_SHOW);
     dlgTab1Dlg->SetWindowPos(NULL, rTab.left, rTab.top, rTab.Width(), rTab.Height(), SWP_NOZORDER);

     dlgTab2Dlg = new CTab2(this);
     dlgTab2Dlg->Create(IDD_TAB2_DIALOG, this);
     dlgTab2Dlg->SetParent(&m_tabOptions);
     dlgTab2Dlg->ShowWindow(SW_SHOW);
     dlgTab2Dlg->SetWindowPos(NULL, rTab.left, rTab.top, rTab.Width(), rTab.Height(), SWP_NOZORDER);
etc...

I cannot get the dialog which contains these tab dialogs to hide the bottom menu bar.  Why would doing the above affect this??
0
Comment
Question by:Wanting2LearnMan
  • 3
  • 2
5 Comments
 

Author Comment

by:Wanting2LearnMan
ID: 24401105
If I comment out the lines:
dlgTab1Dlg->Create(IDD_INCLUDE_DIALOG, this);
and
dlgTab2Dlg->Create(IDD_INCLUDE_DIALOG, this);

Then my dialogs are shown fullscreen with the bottom menu bar hidden (The dialogs in the tabs are not shown but this may give a hint as to whats wrong)
0
 
LVL 33

Expert Comment

by:pgnatyuk
ID: 24401701
I can be wrong here. Also I don't understand - the task is to hide the MS controls and don't see them in the application at all? Or sometimes you need to show them?
How I remember you need to hide MS bars and menus only once in your application, you don't need to do it in each dialog. I don't know remember it will look like if you will open and close them all the time. When you do it (show/hide for the such system controls) you have to redraw your window each time.
In CDialog::OnInitDialog should be a line like:
m_bFullScreen = TRUE;
so just make m_bFullScreen = FALSE in your dialog.
0
 

Author Comment

by:Wanting2LearnMan
ID: 24401812
Yes the task is to hide the MS controls and don't see them in the application at all.  I dont want to see them anytime.

I have found that I have to do it in the OnInitDialog AND OnActivate because if you launch a new dialog the menubar will reappear.  The problem I have is strange as the addition of the Tab control with these other dialogs placed inside the tab control seem to not allow me to hide the menubar like I normally do.

Any other ideas?  Thanks
0
 

Author Comment

by:Wanting2LearnMan
ID: 24401815
Also, why would I make m_bFullScreen = FALSE ? when I want my dialog to be fullscreen?
0
 
LVL 33

Accepted Solution

by:
pgnatyuk earned 500 total points
ID: 24403533
m_bFullScreen is from the MFC, if you will debug your OnInitDialog you can get in into CDialog::OnInitDiallog and see what's going on there. It should TRUE, that was my misunderstanding or a mistake.
How I remember,  MFC calls SHInitDialog, so in each full screen dialog you see the command bar again. You need to hide it and redraw your dialog. You need to handle WM_ACTIVATE. You see - you draw your window millions of times.
I was lucky to escape from this, I don't use MFC. So only when the application starts up, I need to hide the command bar and I need to handle WM_ACTIVATE only in the main window.
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
Let me explain this picture a little bit.  First, in case you haven't already guessed, you are looking at my 2 phones, an Android Samsung Galaxy S5 on the left and an iPhone 5 on the right.  They are on their respective cradles on my desk.  But, you…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now