|
I'm actually suggesting not using OnUpdate . Try updating the buttons without these handlers.
|
|
|
|
|
I only tried OnUpdate after nothing else worked.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
I'm starting a new replay layer for this topic.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
Hi,
In my app, I do not face any such problem. I have followed this thread, and am still not getting it. I'm compiling on evc3.0 PPC2000,but I think this should work with PPC2002 too. here's what I do to enable/disable menuitems and buttons on commandbars(new toolband). FOr every new item, I map UPDATE_COMMAND_UI(), where based on a variable I toggle Enable flag like:
void CMainFrame::OnUpdateAddfiles(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(m_bAddFiles)
{
pCmdUI->Enable(TRUE);
// EnableMenuItem(TEXT("Archive"),TEXT("Add Files"),TRUE);
}
else
{
pCmdUI->Enable(FALSE);
// EnableMenuItem(TEXT("Archive"),TEXT("Add Files"),FALSE);
}
}
BOOL CMainFrame::EnableMenuItem(LPCTSTR szParent,LPCTSTR szChild,BOOL bEnable)
{
CMenu *pMenu = GetMenu();
int pos = FindMenuItem(pMenu, szParent);
if (pos == -1)
return FALSE;
CMenu* submenu = pMenu->GetSubMenu(pos);
int nPos = FindMenuItem(submenu,szChild);
if(nPos == -1)
return FALSE;
if(!bEnable)
submenu->EnableMenuItem(nPos,MF_BYPOSITION|MF_GRAYED);
else
submenu->EnableMenuItem(nPos,MF_BYPOSITION|MF_ENABLED);
return TRUE;
}
BOOL CMainFrame::EnableCommandBarItem(UINT nID, BOOL bEnable)
{
CToolBarCtrl& pCtrl = m_wndCommandBar.GetToolBarCtrl();
pCtrl.EnableButton(nID,bEnable);
return TRUE;
}
BOOL CMainFrame::EnableToolbarItem(UINT nID, BOOL bEnable)
{
CToolBarCtrl& pCtrl = m_wndToolBar.GetToolBarCtrl();
pCtrl.EnableButton(nID,bEnable);
return TRUE;
}
finally, whenever I set m_bAddFiles to TRUE, toolbar button gets enabled and viceversa. EnableCOmmandBarItem() and EnableToolbarItem() is what I tried too, but without ON_UPDATE_UI handlers, things don't happen.
What do you think?
Hush,hush...
thought I heard you call my name now.
Kula Shaker.
Amit Dey
Latest articles at CP - PocketPC New menu
Office addin
|
|
|
|
|
Amit Dey wrote:
I think this should work with PPC2002 too
This might be the problem, Amit. Both me and John experienced the same problem on the PPC 2002, and this led me to write an article on the subject. Have a look at it here: Disabling top-level popup menus in the PocketPC 2002
[^]
|
|
|
|
|
Alrightie... More information:
I decided to see what would happen if I removed the toolbar from the commandbar, leaving just the menu. When I disabled all of the menu items, the "Config" menu item (the last one in the menu) was no longer truncated when it was disabled.
This leads me to believe there's a bug somewhere in the MFC CCeCommandBar code.
For what it's worth, I still haven't figured out why the buttons in the toolbar don't stay disabled, but I think it might be because I'm not telling the commandbar they're disabled, so it might be re-enabling them on it's own.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
John Simmons / outlaw programmer wrote:
This leads me to believe there's a bug somewhere in the MFC CCeCommandBar code.
You mean: just one bug? Oh, dear...
John Simmons / outlaw programmer wrote:
For what it's worth, I still haven't figured out why the buttons in the toolbar don't stay disabled, but I think it might be because I'm not telling the commandbar they're disabled, so it might be re-enabling them on it's own.
Is it possible that I take a look at you code? We could try to solve this in parallel...
|
|
|
|
|
Here's the applicable stuff.
CCeCommandBar m_wndCommandBar;
CToolBar m_barProcess;
CToolBar m_barAnnotate;
CToolBar m_barZoom;
CToolBar m_barVideo;
CToolBar m_barAVI;
UINT m_currentBar;
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
m_menuBarPtr = NULL;
m_currentBar = 0;
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
{
return -1;
}
m_wndCommandBar.m_bShowSharedNewButton = FALSE;
m_ToolTipsTable[0] = MakeString(IDS_NEW);
m_ToolTipsTable[1] = MakeString(IDS_FILE);
m_ToolTipsTable[2] = MakeString(IDS_MHELP);
m_ToolTipsTable[3] = MakeString(IDS_CUT);
m_ToolTipsTable[4] = MakeString(IDS_COPY);
m_ToolTipsTable[5] = MakeString(IDS_PASTE);
m_ToolTipsTable[6] = MakeString(IDS_ABOUT);
if (!m_wndCommandBar.Create(this))
{
TRACE(_T("Failed to create CommandBar\n"));
return -1;
}
m_menuBarPtr = m_wndCommandBar.InsertMenuBar(IDR_MAINFRAME);
if (!m_menuBarPtr ||
!m_wndCommandBar.InsertSeparator() ||
!m_wndCommandBar.AddAdornments() ||
!m_wndCommandBar.LoadToolBar(IDR_MAINFRAME) ||
!m_wndCommandBar.SendMessage(TB_SETTOOLTIPS, (WPARAM)(7), (LPARAM)(m_ToolTipsTable)))
{
TRACE(_T("Failed to create CommandBar\n"));
return -1;
}
m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
if (!CreateOtherCommandBars())
{
TRACE(_T("Failed to create one or more supplementary CommandBars\n"));
return -1;
}
return 0;
}
BOOL CMainFrame::CreateOtherCommandBars()
{
m_currentBar = IDR_MAINFRAME;
UINT barStyle = WS_CHILD | CBRS_BOTTOM | CBRS_BORDER_TOP;
CRect rcBorder(0, 1, 0, 0);
if (!m_barProcess.CreateEx(this, TBSTYLE_FLAT, barStyle, rcBorder, AFX_IDW_TOOLBAR+1) ||
!m_barProcess.LoadToolBar(IDR_PROCESSBAR))
{
TRACE(_T("Failed to create process toolbar\n"));
return FALSE;
}
if (!m_barAnnotate.CreateEx(this, TBSTYLE_FLAT, barStyle, rcBorder, AFX_IDW_TOOLBAR+2) ||
!m_barAnnotate.LoadToolBar(IDR_ANNOTATEBAR))
{
TRACE(_T("Failed to create annotate toolbar\n"));
return FALSE;
}
if (!m_barZoom.CreateEx(this, TBSTYLE_FLAT, barStyle, rcBorder, AFX_IDW_TOOLBAR+3) ||
!m_barZoom.LoadToolBar(IDR_ZOOMBAR))
{
TRACE(_T("Failed to create zoom toolbar\n"));
return FALSE;
}
if (!m_barVideo.CreateEx(this, TBSTYLE_FLAT, barStyle, rcBorder, AFX_IDW_TOOLBAR+4) ||
!m_barVideo.LoadToolBar(IDR_VIDEOBAR))
{
TRACE(_T("Failed to create live video toolbar\n"));
return FALSE;
}
if (!m_barAVI.CreateEx(this, TBSTYLE_FLAT, barStyle, rcBorder, AFX_IDW_TOOLBAR+5) ||
!m_barAVI.LoadToolBar(IDR_AVIBAR))
{
TRACE(_T("Failed to create avi toolbar\n"));
return FALSE;
}
return TRUE;
}
void CMainFrame::ShowThisBar(UINT newBar)
{
switch (m_currentBar)
{
case IDR_PROCESSBAR : m_barProcess.ShowWindow(SW_HIDE); break;
case IDR_ANNOTATEBAR : m_barAnnotate.ShowWindow(SW_HIDE); break;
case IDR_ZOOMBAR : m_barZoom.ShowWindow(SW_HIDE); break;
case IDR_VIDEOBAR : m_barVideo.ShowWindow(SW_HIDE); break;
case IDR_AVIBAR : m_barAVI.ShowWindow(SW_HIDE); break;
default : break;
}
switch (newBar)
{
case IDR_PROCESSBAR : m_barProcess.ShowWindow(SW_SHOW); break;
case IDR_ANNOTATEBAR : m_barAnnotate.ShowWindow(SW_SHOW); break;
case IDR_ZOOMBAR : m_barZoom.ShowWindow(SW_SHOW); break;
case IDR_VIDEOBAR : m_barVideo.ShowWindow(SW_SHOW); break;
case IDR_AVIBAR : m_barAVI.ShowWindow(SW_SHOW); break;
default : break;
}
m_currentBar = newBar;
BOOL bEnable = (m_currentBar == 0);
m_wndCommandBar.GetToolBarCtrl().EnableButton(ID_NEXT_IMAGE, bEnable);
m_wndCommandBar.GetToolBarCtrl().EnableButton(ID_PREV_IMAGE, bEnable);
m_wndCommandBar.GetToolBarCtrl().EnableButton(ID_REMOVE_IMAGE, bEnable);
m_wndCommandBar.SendMessage(TB_ENABLEBUTTON, 0xf000, MAKELONG(bEnable,0));
m_wndCommandBar.SendMessage(TB_ENABLEBUTTON, 0xf001, MAKELONG(bEnable,0));
m_wndCommandBar.SendMessage(TB_ENABLEBUTTON, 0xf002, MAKELONG(bEnable,0));
m_wndCommandBar.SendMessage(TB_ENABLEBUTTON, 0xf003, MAKELONG(bEnable,0));
RecalcLayout(TRUE);
}
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
Unless I'm really missing something here, the code should work. You have removed the OnUpdate handlers, right?
|
|
|
|
|
Right.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
I'm experiencing the same problem with my code. Apparently, there is some bug int the CCeCommandBar code because when I disable the menu "buttons", I also get the same "clipping" problem. I'll check it out and get back to you.
|
|
|
|
|
I have it!
Believe-me: it's hairy. If you didn't like PPC2K2 UI development, I'm giving you yet another reason... I'm thinking about posting this change as a code update for the multi bar article. When it's ready, I'll let you know.
|
|
|
|
|
|
Man, that's BITCHIN'!
I'll tinker around with it and see if I can't figure out why the buttons in the toolbar don't stay disabled. It may require adding one or more functions to your new class to make it happen.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
John Simmons / outlaw programmer wrote:
Man, that's BITCHIN'!
You bet!
John Simmons / outlaw programmer wrote:
It may require adding one or more functions to your new class to make it happen.
Let me know what you find out!
|
|
|
|
|
Hi,
In my app, I do not face any such problem. I have followed this thread, and am still not getting it. I'm compiling on evc3.0 PPC2000,but I think this should work with PPC2002 too. here's what I do to enable/disable menuitems and buttons on commandbars(new toolband). FOr every new item, I map UPDATE_COMMAND_UI(), where based on a variable I toggle Enable flag like:
void CMainFrame::OnUpdateAddfiles(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
if(m_bAddFiles)
{
pCmdUI->Enable(TRUE);
// EnableMenuItem(TEXT("Archive"),TEXT("Add Files"),TRUE);
}
else
{
pCmdUI->Enable(FALSE);
// EnableMenuItem(TEXT("Archive"),TEXT("Add Files"),FALSE);
}
}
BOOL CMainFrame::EnableMenuItem(LPCTSTR szParent,LPCTSTR szChild,BOOL bEnable)
{
CMenu *pMenu = GetMenu();
int pos = FindMenuItem(pMenu, szParent);
if (pos == -1)
return FALSE;
CMenu* submenu = pMenu->GetSubMenu(pos);
int nPos = FindMenuItem(submenu,szChild);
if(nPos == -1)
return FALSE;
if(!bEnable)
submenu->EnableMenuItem(nPos,MF_BYPOSITION|MF_GRAYED);
else
submenu->EnableMenuItem(nPos,MF_BYPOSITION|MF_ENABLED);
return TRUE;
}
BOOL CMainFrame::EnableCommandBarItem(UINT nID, BOOL bEnable)
{
CToolBarCtrl& pCtrl = m_wndCommandBar.GetToolBarCtrl();
pCtrl.EnableButton(nID,bEnable);
return TRUE;
}
BOOL CMainFrame::EnableToolbarItem(UINT nID, BOOL bEnable)
{
CToolBarCtrl& pCtrl = m_wndToolBar.GetToolBarCtrl();
pCtrl.EnableButton(nID,bEnable);
return TRUE;
}
finally, whenever I set m_bAddFiles to TRUE, toolbar button gets enabled and viceversa. EnableCOmmandBarItem() and EnableToolbarItem() is what I tried too, but without ON_UPDATE_UI handlers, things don't happen.
What do you think?
Hush,hush...
thought I heard you call my name now.
Kula Shaker.
Amit Dey
Latest articles at CP - PocketPC New menu
Office addin
|
|
|
|
|
Well, I tried *all* of that before posting my original message. You must not have read my final post entrirely. The toolbar buttons are *not* associated with *any* menu items. Because of this, you can't use the standard OnUpdate coding. You have to prop it up with extra coding.
You're not the only one that said "it looks like it should work". You're right - it does *look* like it should work.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|
Hi all,
I am doing my final year project on Pocket PC. I want to set up a Client-Server communication between Pocket PC iPAQ h5400 series (Pocket PC 2002) (server) and a desktop computer (Windows 2000) (client). I use Embedded Visual C++ 3.0 and MFC dialog to implement. I firstly implement it using TCP protocol but I got a winsock error 10061 (Pocket PC 2002 Emulator) and even get 10060 when directly connected to the iPAQ h5400 series using USB)
sckConnectionRefused 10061 Connection is forcefully rejected.
sckTimedout 10060 Socket has been shut down.
The server and client codes are referenced from MSDN at http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecomm/htm/_wcesdk_TCP_Stream_Socket_Server.asp .
The main problem is that the server cannot get any message from the client and wait at the Accept call and halt the program. (When using emulator)à I find that the specific port 5000 is not listening by using netstat on Windows 2000 after the program has reached the Accept call. So can anyone kindly help to solve the problem?
On the other hand, I implement it using UDP protocol but the server still can’t receive any message from the client. The codes are referenced from MSDN at
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecomm/htm/_wcesdk_TCP_Stream_Socket_Server.asp also.
Furthermore, is there any method in Pocket PC that can check connection like “netstat” in Windows OS for ports??
It’s really urgent as I have to hand it before 26/3/2003 so please kindly help me.
Many thanks!!!
Wil
|
|
|
|
|
Hi Wil
The problem is that there are no routing tables set up to route IP connections from the PC to the PocketPC through ActiveSync. In other words, IP cannot find a way through to the PocketPC. The IP connectivity over ActiveSync has been set up to allow routing from the device to the PC.
So if you set up a listening socket on the PC instead of the device, you should find that the device can connect to that.
If you definitely need the listening socket on the device, then you'll either have to set up the routing tables on the PC or test over a proper network connection, not the cradle.
Hope that helps,
MikeS.
|
|
|
|
|
MikeS,
Thanks for your explanation about the problem! It's really useful for me to continue my project. I think I will change to let the desktop to listnen.
Thanks again!
Wil
|
|
|
|
|
Hi all,
I am using Embedded Visual C++ 3.0 and MFC dialog mode for implementation. Firstly, if I want to read one line each time from a .txt file in Pocket PC, can I use the following code?
char* data;
data = NULL;
fp=fopen("\\sip.txt","r");
while((!feof(fp)) && (fp != NULL))
{
fscanf(fp, "%s", data);
// Process the data here
}
fclose(fp);
Then, if I want to get the typed message from an edit box in a MFC dialog box and write/ append it into the file each time a line, should I do this?
CString asip;
GetDlgItemText(INPUT_ASIP, asip);
fp=fopen("\\sip.txt","a");
fprintf(fp, "%s\n", asip);
fclose(fp);
But I encounter a problem that the output file “sip” contains only the first character of the CString asip. How can I solve this?
It’s really urgent as I have to hand the program before 26/3/2003 so please kindly help me.
Many thanks!!!
Wil
|
|
|
|
|
The PocketPC only supports UNICOD through TCHAR , not char . You have to rewrite everything in order to use TCHAR .
|
|
|
|
|
|
Is it just me, or is this messaging system really typo-prone? I meant UNICODE , of course...
|
|
|
|
|
"UNICOD" is a new scientifically engineered generic fish, guaranteed to be edible, even in Fance.
------- signature starts
"...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
Please review the Legal Disclaimer in my bio.
------- signature ends
|
|
|
|
|