Subject |
Author |
Date |
|
Gevork Odabashyan
|
Jan 25, 2011 - 3:37 AM
|
We are waiting for the answer on our question for two weeks already! www.prof-uis.com/prof-uis/tech-support/support-forum/problem-with-the-tabbed-dynamic-bars-69027.aspx Through this bug we can not release the programm update. At least we would like to know the status of this bug: are you planning to correct it or no? If it is possible, we would like to know at least the approximate term of its correction. It`s more than impolite not to answer our questions on the forum of the tecnical support as we pay for it. We are still waiting for any answer from you...
|
|
Mantra
|
Jan 25, 2011 - 3:20 AM
|
ist there a way to chache all Data from a rowset when using Sample App AdoRecordsetView ?
On normal selects there’s no problem, but with SP’s there will be only the header loaded. When looping truth the recordset, there are records present, so it’s not a rowset problem. Thanks !
|
|
Mantra
|
Feb 1, 2011 - 6:56 AM
|
I don’t need to send you a testproject .. this message is coming from your ADO example. I’ll send you regrading this post a SP and a small DB where you can check this issue.
Thanks !
|
|
Technical Support
|
Feb 1, 2011 - 9:55 AM
|
Still didn’t receive any e-mail from you.
|
|
Technical Support
|
Jan 25, 2011 - 12:25 PM
|
There is no difference between SELECTs and SPs. Please check your SP using Query Analyzer. It must return a recordset you expect to see.
|
|
Mantra
|
Jan 28, 2011 - 3:02 AM
|
If I loop thrue the records and load them manualy (see code below) it works.
So there is a recordset. If I use the sample app, i get this message : The opened ADO recordset object has changed the requested record scrolling type to **adOpenForwardOnly**
(this may caused by limited cursor library implementation of currently used OLE-DB provider) On the example app i use the following Connectionstr:
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ALKIDEV;Data Source=BTTSRVDB02
If I change adOpenForwardOnly or any other settings I never get a result back in ADOrecordsetView ! Query is as SP:
exec spQueryVertreterBeleg @VertreterID = 0, @vonDatum = ’20100101’, @bisDatum = ’20101231’ Manuell loop and load to the grid (its a wrapper class I wrote) :
_variant_t var;
CString strMsg;
long Index = m_objAdoRS->GetFields()->Count;long RecCount = 0;// loop thru the recordset
{
{
var = m_objAdoRS->GetFields()->Item[x]->Value;
while (! m_objAdoRS->GetADOEOF())for (long x = 0; x < Index; x++)switch (var.vt) //m_objAdoRS->GetFields()->Item[x]->Type)
{
case VT_EMPTY:case VT_NULL: // empty
{
{
InsertItem(RecCount, _T(
} if (x == 0)"NULL"));else
{
SetItemText(RecCount, x, _T(
}
}
{
AddRow(RecCount);
}
SetItemNumber(RecCount, x, var.fltVal);
{
AddRow(RecCount);
}
SetItemNumber(RecCount, x, var.dblVal);
{
AddRow(RecCount);
}
SetItemNumberLong(RecCount, x, var.iVal);
{
AddRow(RecCount);
}
SetItemNumberLong(RecCount, x, var.intVal);
{
AddRow(RecCount);
}
SetItemNumberLong(RecCount, x, var.lVal);
{
AddRow(RecCount);
}
SetItemNumberLong(RecCount, x, var.ulVal);
{
var.ChangeType(VT_R8);
{
AddRow(RecCount);
}
SetItemNumber(RecCount, x, var.dblVal);
}
{
{
AddRow(RecCount);
}
var.ChangeType(VT_R8);
SetItemNumber(RecCount, x, var.dblVal);
}
"NULL"));break;case VT_R4:if (x == 0)break;case VT_R8:if (x == 0)break;case VT_I2:case VT_UI1:if (x == 0)break;case VT_INT:if (x == 0)break;case VT_I4:if (x == 0)break;case VT_UI4:if (x == 0)break;case VT_DECIMAL:if (x == 0)break;case VT_CY:if (x == 0)break;case VT_BOOL: // boolean
{
strMsg = _T(
if (var.boolVal)"TRUE");else
strMsg = _T(
{
InsertItem(RecCount, strMsg);
} "FALSE");if (x == 0)else
{
SetItemText(RecCount, x, strMsg);
}
}
break;case VT_ERROR: // Error
{
strMsg = _T(
{
InsertItem(RecCount, strMsg);
} "ERROR");if (x == 0)else
{
SetItemText(RecCount, x, strMsg);
}
}
break;case VT_DATE: // datetime
{
COleDateTime dt(var.date);
{
AddRow(RecCount);
}
SetDateTimeCtrlDate(RecCount, x, dt); if (x == 0)// index = 0 -> Insert Item!
}
break;case VT_BSTR: // bytestrings WCHAR and other strings
{
strMsg = var.bstrVal;
{
InsertItem(RecCount, (LPCTSTR) strMsg);
} if (x == 0)else
{
SetItemText(RecCount, x, (LPCTSTR) strMsg);
}
}
}
}
m_objAdoRS->MoveNext();
RecCount++;
} break;default:break;
m_objAdoRS->MoveFirst();
|
|
Technical Support
|
Jan 28, 2011 - 7:21 AM
|
Could you create a simple test project reproducing this problem and send it to us?
|
|
tera tera
|
Jan 25, 2011 - 12:49 AM
|
Hello. In OnwerDraw, I draw CListBox.
However, I do not understand a method to perform the acquisition and the setting of the position of the focus. If there is a good method, please teach it.
|
|
Technical Support
|
Jan 26, 2011 - 2:26 PM
|
The ODA_*** flags are always provided by Windows Common Controls. The ODA_FOCUS and ODA_SELECT flags are always provided for focused and selected items. You can find examples of how to use them in Prof-UIS and sample projects
|
|
Technical Support
|
Jan 25, 2011 - 12:24 PM
|
Please use the DRAWITEMSTRUCT::itemAction flags. The ODA_FOCUS flag presence indicates focused item state.
|
|
tera tera
|
Jan 25, 2011 - 4:59 PM
|
I know the existence of ODA_FOCUS. Do not you know the method except it?
|
|
MUKESH GUPTA
|
Jan 21, 2011 - 7:23 AM
|
We were using ProfUIS version 2.54 and have recently upgraded to the latest version 2.91.I built all the static and dll targets of 2.91 on VS2008.
I am facing 2 problems :
1. I am getting the following assert fired at line 264 and line 267 from ProfUIS291\Src\ExtPaintManager.cpp
VERIFY( m_bmpFilterApplied.LoadBMP_Resource( MAKEINTRESOURCE( IDB_EXT_BITMAP_FILTER_APPLIED ) ) ); // Line 264 VERIFY( m_bmpFilterUnApplied.LoadBMP_Resource( MAKEINTRESOURCE( IDB_EXT_BITMAP_FILTER_UNAPPLIED ) ) ); // Line 267
Here is the call stack
> ProfUIS291md-RDE.dll!CExtPaintManager::CExtPaintManager() Line 264 + 0x35 bytes C++ ProfUIS291md-RDE.dll!CExtPaintManagerXP::CExtPaintManagerXP() Line 366 + 0x16 bytes C++ ProfUIS291md-RDE.dll!CExtPaintManager::CExtPaintManagerAutoPtr::InstallPaintManager(CExtPaintManager * pPaintManager=0x00000000) Line 1064 + 0x2f bytes C++ ProfUIS291md-RDE.dll!CExtPaintManager::CExtPaintManagerAutoPtr::InitPaintManagerInstance() Line 1022 C++ ProfUIS291md-RDE.dll!CExtPaintManager::CExtPaintManagerAutoPtr::GetPM() Line 1027 C++ ProfUIS291md-RDE.dll!CExtTabWnd::PmBridge_GetPM() Line 839 + 0x18 bytes C++ ProfUIS291md-RDE.dll!CExtTabWnd::_GetTabWndFont(CFont * pFont=0x0012b384, bool bSelected=false, unsigned long dwOrientation=0) Line 1042 + 0x13 bytes C++ ProfUIS291md-RDE.dll!CExtTabWnd::TAB_ITEM_INFO::Measure(CDC * pDcMeasure=0x0012b78c) Line 245 + 0x1d bytes C++ ProfUIS291md-RDE.dll!CExtTabWnd::_RecalcLayoutImpl() Line 2578 + 0x16 bytes C++ ProfUIS291md-RDE.dll!CExtTabWnd::UpdateTabWnd(bool bImmediate=true) Line 2147 + 0x12 bytes C++ ProfUIS291md-RDE.dll!CExtTabWnd::OnSize(unsigned int nType=0, int cx=236, int cy=27) Line 5029 C++
I debugged ProfUIS and found that the dll is not able to find the bitmap resource IDB_EXT_BITMAP_FILTER_APPLIED and IDB_EXT_BITMAP_FILTER_UNAPPLIED. But when i open up the ProfUIS291md-RDE.dll in VS2008 and check its content i can see the bitmaps with id 30590 (for IDB_EXT_BITMAP_FILTER_APPLIED) and 30591 (for IDB_EXT_BITMAP_FILTER_UNAPPLIED) present inside "Bitmap" resource folder.
Strangely if i go about defining __STATPROFUIS_WITH_DLLMFC__ in my project under Project->Properties->Resources->General->Preprocessor Definations and below code in my *.rc2 file it is able to find the resource and hence no assert.
// Add manually edited resources here... #if ( !(defined _AFXDLL && !defined __STATPROFUIS_WITH_DLLMFC__) ) #include <Resources/Resource.rc> #endif
I think the above should be required only from ProfUSI static libraries and not dynamic libraries as static libraries cannot have resources.
Another observation is that no assert is fired in projects that are using ProfUIS291md.dll and they are able to find the resources.
What is going wrong here?
2. A second more important problem :
We had an .ocx that was using ProfUIS254ynd.lib(ascii static library).Now we have modified the project setting of .ocx to use MBCS character set and in additon use dynamic library ProfUIS291md-RDE.dll.Please note that i have also defined _PROF_UIS_FOR_REGULAR_DLL preprocessor symbol in project settings of .ocx.
We have a popup list that is part of the ocx and when we click on it , it is firing the following asserts and eventually crashing.
Assert is fired from file ProfUIS291\Src\ExtComboBox.cpp line 2101
void CExtComboBoxBase::OnFilterPopupListClose() { ASSERT_VALID( this ); if( m_pPopupListWnd->GetSafeHwnd() != NULL && ::IsWindow( m_pPopupListWnd->m_hWnd ) && m_pPopupListWnd->IsWindowVisible() )
///// ///// }
Internally ASSERT_VALID( this ) call’s below code from from C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc\wincore.cpp
if(pMap) { ASSERT( (p = pMap->LookupPermanent(m_hWnd)) != NULL || (p = pMap->LookupTemporary(m_hWnd)) != NULL); }
Here is the call stack
> mfc90d.dll!CWnd::AssertValid() Line 906 + 0x43 bytes C++ mfc90d.dll!AfxAssertValidObject(const CObject * pOb=0x0464d03c, const char * lpszFileName=0x06a45490, int nLine=2101) Line 107 C++ ProfUIS291md-RDE.dll!CExtComboBoxBase::OnFilterPopupListClose() Line 2105 C++ ProfUIS291md-RDE.dll!CExtComboBoxBase::OnHookSpyPreTranslateMessage(tagMSG * pMSG=0x0012fcf4) Line 1985 + 0x16 bytes C++ ProfUIS291md-RDE.dll!CExtHookSpy::HSLL_OnCallWindowProcIn(bool & bCallNextHook=true, long & lResult=0, int nCode=0, bool bMessageSentByCurrentThread=false, tagCWPSTRUCT * pMessageData=0x0012fde0) Line 1602 + 0x13 bytes C++ ProfUIS291md-RDE.dll!CExtHookSpy::HookSpyItem_t::SHS_HookCallWindowProcIn(int nCode=0, unsigned int wParam=0, long lParam=1244640) Line 1242 + 0x2a bytes C++
Please guide me whats going wrong above.
|
|
Technical Support
|
Jan 28, 2011 - 7:23 AM
|
The regular DLL initializes Prof-UIS state managing using the following line of code:
CExt_ProfUIS_ModuleState::InitExtension( AfxGetStaticModuleState() );
You can also make EXE module using the same state managing mechanism: CExt_ProfUIS_ModuleState::InitExtension( AfxGetAppModuleState() );
The EXE module typically never needs to manage MFC state switching. But this can help to fix errors related to MFC state switching in loaded MFC regular DLLs.
|
|
MUKESH GUPTA
|
Jan 27, 2011 - 8:03 AM
|
1. I will get back to you with a sample application.
2. I tried the code changes that you recommended in OnHookSpyPreTranslateMessage() method but the asserts are still firing.
When i debugged in __PROF_UIS_MANAGE_STATE; macro i found that in the below code g_pExternalModuleState is always NULL and so the m_pAfxState is never initialized with new AFX_MAINTAIN_STATE2.
Refer ..\ProfUISDLL\ProfUISDLL.cpp
CExt_ProfUIS_ModuleState::CExt_ProfUIS_ModuleState() { m_pAfxState = NULL; if( g_pExternalModuleState != NULL ) m_pAfxState = new AFX_MAINTAIN_STATE2( g_pExternalModuleState ); }
Moreover the function CExt_ProfUIS_ModuleState::InitExtension which initializes g_pExternalModuleState is called for those dll that do not have __PROF_UIS_FOR_REGULAR_DLL defined like ProfUIS291md.dll and for these dll also it is called with NULL parameter,which means g_pExternalModuleState will always be NULL.
Refer ..\ProfUISDLL\ProfUISDLL.cpp
void CExt_ProfUIS_ModuleState::InitExtension( AFX_MODULE_STATE * pExternalModuleState // = NULL ) { new CDynLinkLibrary( the_ProfUIS_ExtensionModule ); g_pExternalModuleState = pExternalModuleState; } For ProfUIS291md-RDE.dll , InitExtension() is never called and so g_pExternalModuleState is always NULL.
With the change you sent is our real intent is to execute m_pAfxState = new AFX_MAINTAIN_STATE2( g_pExternalModuleState ); ?
Am i missing something or do i need to do something extra?
Regards.
|
|
Technical Support
|
Jan 26, 2011 - 1:18 PM
|
1) This problem requires a test project which reproduces it.
2) This issue can be fixed by updating the following method:
bool CExtComboBoxBase::OnHookSpyPreTranslateMessage(
MSG * pMSG
)
{
__PROF_UIS_MANAGE_STATE;
ASSERT( pMSG != NULL );
if( m_hWnd != NULL
&& ::IsWindow( m_hWnd )
&& ( GetStyle() & WS_VISIBLE ) != 0
&& ( pMSG->hwnd == m_hWnd
|| ::IsChild( m_hWnd, pMSG->hwnd )
|| ::GetParent( m_hWnd ) == pMSG->hwnd
)
)
{
if( pMSG->message == WM_ACTIVATEAPP
|| pMSG->message == WM_CANCELMODE
|| pMSG->message == WM_SETFOCUS
|| pMSG->message == WM_KILLFOCUS
|| pMSG->message == WM_SYSCOMMAND
|| pMSG->message == WM_STYLECHANGING
|| pMSG->message == WM_STYLECHANGED
|| pMSG->message == WM_CLOSE
|| pMSG->message == WM_DESTROY
|| pMSG->message == WM_NCDESTROY
|| pMSG->message == WM_ENABLE
|| pMSG->message == WM_SIZE
|| pMSG->message == WM_NEXTDLGCTL
|| pMSG->message == WM_LBUTTONDOWN
|| pMSG->message == WM_RBUTTONDOWN
|| pMSG->message == WM_MBUTTONDOWN
|| CExtPopupMenuWnd::IsMenuTracking()
|| CExtControlBar::_DraggingGetBar() != NULL
|| ( ( pMSG->message == WM_WINDOWPOSCHANGING
|| pMSG->message == WM_WINDOWPOSCHANGED
)
&& ( ((LPWINDOWPOS)pMSG->lParam)->flags&(SWP_NOMOVE|SWP_NOSIZE) ) == 0
)
|| ( ( pMSG->message == WM_ACTIVATE || pMSG->message == WM_MOUSEACTIVATE )
&& (! ::IsChild( m_hWnd, pMSG->hwnd ) )
)
)
{
OnFilterPopupListClose();
return true;
}
}
return CExtHookSpy::OnHookSpyPreTranslateMessage( pMSG );
}
|
|
MUKESH GUPTA
|
Jan 27, 2011 - 8:21 AM
|
1. I will get back to you with a sample application.
2. I tried the code changes that you recommended in OnHookSpyPreTranslateMessage() method but the asserts are still firing.
When i debugged in __PROF_UIS_MANAGE_STATE; macro i found that in the below code g_pExternalModuleState is always NULL and so the m_pAfxState is never initialized with new AFX_MAINTAIN_STATE2.
Refer ..\ProfUISDLL\ProfUISDLL.cpp
CExt_ProfUIS_ModuleState::CExt_ProfUIS_ModuleState() { m_pAfxState = NULL; if( g_pExternalModuleState != NULL ) m_pAfxState = new AFX_MAINTAIN_STATE2( g_pExternalModuleState ); }
Moreover the function CExt_ProfUIS_ModuleState::InitExtension which initializes g_pExternalModuleState is called for those dll that do not have __PROF_UIS_FOR_REGULAR_DLL defined like ProfUIS291md.dll and for these dll also it is called with NULL parameter,which means g_pExternalModuleState will always be NULL.
Refer ..\ProfUISDLL\ProfUISDLL.cpp
void CExt_ProfUIS_ModuleState::InitExtension( AFX_MODULE_STATE * pExternalModuleState // = NULL ) { new CDynLinkLibrary( the_ProfUIS_ExtensionModule ); g_pExternalModuleState = pExternalModuleState; } For ProfUIS291md-RDE.dll , InitExtension() is never called and so g_pExternalModuleState is always NULL.
With the change you sent is our real intent is to execute m_pAfxState = new AFX_MAINTAIN_STATE2( g_pExternalModuleState ); ?
Am i missing something or do i need to do something extra?
Regards.
|
|
Gevork Odabashyan
|
Jan 21, 2011 - 6:02 AM
|
|
|
RICHARD ALTON
|
Jan 19, 2011 - 11:11 AM
|
Hi, We have 2 longstanding issues with the customise state persistence that I am unsure how best to solve: 1) Being able to save the customisation in a way that the users can maintain their window layouts between versions of our app: Our state information for the control bar layout and command manager etc is stored using CExtCustomizeStateSave/Load and CExtControlBar::ProfileBarStateSave/Load in the usual way. These functions save binary data into the registry. This causes problems if we, for example, add a new toolbar. The data can only be serialized successfully if the saved data exactly matches the layout of the app. We have got around this for years by setting a #define UI_VERSION X constant in our app, which we increment when we change the layout. When the app loads, if this version differs from the stored one, then I wipe all Prof-UIS registry settings and the app can run without crashing. This however annoys our users since their layout returns to the default everytime they get a new release of our app. What we would like, is a backwards-compatible version of the state persistence that allows us to maintain existing stored data, yet will also let us save/load any newly added data (toolbars, command customisations, etc). Is there any way you can think we can get around this problem and not have to keep resetting the layouts everytime we make a change? I would suggest maybe an XML based save/load system rather than a binary one would allow for this, and would be backwards compatible? 2) As a follow on from above, we would like to store user-profiles on the server, i.e. keep all state persistence data in a file on the server, so whichever computer a user is working on, they can see their own personal window/toolbar layout. I read that we could use the existing system to write the profile data to a file, which is half the issue, but we would still have the versioning issues as descrived above, where if the file stored on the server is of a different version to the app the user is running, then their settings will all be reset to default. Any ideas/suggestions as to the best way to solve these issues? I guess probably it would be a major refactor and I may have to write my own XML based version of the state persistence. However I would rather not have to do this... Thanks.
|
|
Offer Har
|
Jan 19, 2011 - 10:52 AM
|
Dear Support, We need to change the size of the ’X’ on all the control-bars (need to increase it) and we would like to change the image to our own. How can we do this? Thanks, Ron.
|
|
Technical Support
|
Jan 24, 2011 - 9:02 AM
|
There is no size computation event. Buttons just position themselves in the CExtBarNcAreaButton::OnNcAreaReposition() virtual method.
|
|
Offer Har
|
Jan 24, 2011 - 9:16 AM
|
So how can I make the button bigger? I want it to be 120x20 pixels for example.
|
|
Technical Support
|
Jan 24, 2011 - 12:18 PM
|
You can make it bigger and/or, optionally, position it on the left side of caption instead of the right one. This is demonstrated in the FixedSizePanels sample application. See the CMyResizableInFixedModeBar::CNcBackForwardNavigationBtn::OnNcAreaReposition() method’s source code. This method uses a width that equal to the height: m_rc.right = m_rc.left + m_rc.Height();
You can make your button wider.
|
|
Technical Support
|
Jan 20, 2011 - 2:30 AM
|
|
|
Offer Har
|
Jan 20, 2011 - 6:54 AM
|
Thanks. Still It’s not clear to me where do I change the size of it - I understand that if I override the OnNcAreaDraw I can draw it, but where do I set the size of it? Thanks, Ron.
|
|
Offer Har
|
Jan 19, 2011 - 9:00 AM
|
Dear Support, We have two toolbars. We want to dock one to the left side of the application and one on top. We need the docked toolbar at the left side to reach all the way to the top-left corner of the application, but when we dock the top toolbar, the top toolbar pushes the toolbar docked on the left side under it:
+---------------------------------------+
| TOP TOOLBAR |
+---+-----------------------------------+
| | |
| L | |
| E | |
| F | |
| T | |
| | |
| T | |
| O | |
| O | |
| L | |
| B | |
| A | |
| R | |
+---+-----------------------------------+ What we need is this:
+---+-----------------------------------+
| | TOP TOOLBAR |
| +-----------------------------------+
| | |
| L | |
| E | |
| F | |
| T | |
| | |
| T | |
| O | |
| O | |
| L | |
| B | |
| A | |
| R | |
+---+-----------------------------------+ How do we do it? This is very important in our application. Thanks, Ron.
|
|
Technical Support
|
Jan 20, 2011 - 2:27 AM
|
If both toolbars are non-redockable, you should create the left toolbar before the top toolbar. If you are using re-dockable toolbars, you should place the mainframe’s child window with the AFX_IDW_DOCKBAR_LEFT identifier before the window with the AFX_IDW_DOCKBAR_TOP identifier.
|
|
Offer Har
|
Jan 21, 2011 - 7:46 AM
|
|
|
Technical Support
|
Jan 24, 2011 - 9:01 AM
|
Please find the first main frame’s child windows with the AFX_IDW_DOCKBAR_TOP , AFX_IDW_DOCKBAR_BOTTOM , AFX_IDW_DOCKBAR_LEFT and AFX_IDW_DOCKBAR_RIGHT dialog control identifiers using the GetDlgItem() API. Then reorder them like you need. Here is how to do this in the DRAWCLI sample application (put this code snippet to the end of CMainFrame::OnCreate() method):
CWnd * pDockBarT = GetDlgItem( AFX_IDW_DOCKBAR_TOP );
CWnd * pDockBarB = GetDlgItem( AFX_IDW_DOCKBAR_BOTTOM );
CWnd * pDockBarL = GetDlgItem( AFX_IDW_DOCKBAR_LEFT );
CWnd * pDockBarR = GetDlgItem( AFX_IDW_DOCKBAR_RIGHT );
ASSERT_VALID( pDockBarT );
ASSERT_VALID( pDockBarB );
ASSERT_VALID( pDockBarL );
ASSERT_VALID( pDockBarR );
pDockBarB->SetWindowPos( pDockBarR, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOREDRAW|SWP_NOSENDCHANGING );
pDockBarT->SetWindowPos( pDockBarB, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOREDRAW|SWP_NOSENDCHANGING );
RecalcLayout();
return 0;
|
|
Offer Har
|
Jan 24, 2011 - 9:15 AM
|
Dear Support, I still do not understand one thing - how will GetDlgItem return me the right bars - none of my bars use this IDs, they are toolbars with IDs I gave them that are meaningfull like ID_TOOLBAR_FILE, ID_TOOLBAR_VIEW etc. Also, the two lines between the RecalcLayout, what do they do? Thanks, Ron.
|
|
Technical Support
|
Jan 26, 2011 - 2:43 AM
|
GetDlgItem() returns CDockBar objects rather than your bars. Those two lines change Z-orders of top and bottom CDockBar windows. Before these lines are invoked, the CDockBar windows have the following Z-order order: top, bottom, left, right. After these lines are invoked: left, right, top, bottom i.e. left and right CDockBar windows dock themselves before top and bottom. Or, in other words, left and right CDockBar windows now have a chance to take up the entire available height.
|
|
Offer Har
|
Jan 20, 2011 - 6:29 AM
|
Dear Support, I tried with no luck to do what you said, still, the minute I dock anithing at the top or bottom it bushes the toolbars. Can you explain whan you mean in this sentence: you should place the mainframe’s child window with the AFX_IDW_DOCKBAR_LEFT identifier before the window with the AFX_IDW_DOCKBAR_TOP identifier. What child you are talking about and what are these IDs? my toolbars don’t have these IDs. Thanks, Ron.
|
|
Offer Har
|
Jan 19, 2011 - 7:51 AM
|
Dear Support, We need to change the row height in CExtGridWnd in all of our grids. We tried overriding DefaultRowHeightGet , but it only changed the height of the title row (top row) what function do we need to use for changing the other rows? Thanks, Ron.
|
|
Technical Support
|
Jan 20, 2011 - 2:25 AM
|
The CExtGridWnd::OnSiwQueryItemExtentV() virtual method returns the height of data rows. It uses the DefaultRowHeightGet() method only if the FixedSizeRowsGet() method returns true . I.e. if the __EGBS_FIXED_SIZE_ROWS style is applied. The CExtGridBaseWnd::OuterRowHeightGet() method returns the height of outer header rows. It uses the DefaultRowHeightGet() method by default.
|
|
Offer Har
|
Jan 20, 2011 - 6:57 AM
|
|
|
Offer Har
|
Jan 18, 2011 - 2:57 PM
|
Dear Support, We created a dialog derived from CExtNCW<CExtResizableDialog> . We set the dialog in the resource editor to not include a title bar. The dialog did have a title bar... all the dialog controls were shifter so that the bottom ones were cut. if we removed the CExtNCW it did not have a title bar. Please fix it so that we’ll be able to have themed frame even if the title bar is not displayed. Thanks, Ron.
|
|
Technical Support
|
Jan 19, 2011 - 3:16 AM
|
The CExtNCW template class was created for providing WS_OVERLAPPED -like windows with skinned caption and borders. It should be used with WS_POPUP windows floating on desktop and with MDI child windows. It can be used with any other types of windows which have border and caption. The CExtNCW template class is not for applying to windows without non-client area. Please provide us with more details about your dialog.
|
|
Offer Har
|
Jan 19, 2011 - 6:05 AM
|
OK. We dropped the CExtNCW from this dialog, as the thin frame MS supplies is enough for it.
|
|
Offer Har
|
Jan 18, 2011 - 7:54 AM
|
Dear Support, We need to change the row height in CExtTreeGridWnd . We tried overriding DefaultRowHeightGet , but it only changed the height of the title row (top row) what function do we need to use for changing the other rows? Thanks, Ron.
|
|
Technical Support
|
Jan 19, 2011 - 1:50 AM
|
Here is how to change the row height in tree grid: HTREEITEM hti = wndTreeGrid.ItemInsert( . . . );
CExtGridCell * pCellHTI = (CExtGridCell *)hti;
pCellHTI->ExtentSet( 50 ); // 50 pixels height
Alternatively, you can override the CExtTreeGridWnd::OnSiwQueryItemExtentV() virtual method.
|
|
Offer Har
|
Jan 17, 2011 - 9:49 AM
|
Dear Support. We encountered a performance problem when using Prof-UIS 2.90. We have a couple of combo-boxes that are filled with a large amount of items (around 300). We see that each call to AddString generate a chain of Prof-UIS calls starting with a call to CExtHookSpy::HSLL_OnCallWindowProcIn . The call stack looks like this for each AddString :
mfc80d.dll!AfxAssertValidObject(const CObject * pOb=0x034dfa0c, const char * lpszFileName=0x02ed7f88, int nLine=1566) Line 81 C++
ProfUIS290md.dll!CMap<CExtHookSpy *,CExtHookSpy *,bool,bool>::Lookup(CExtHookSpy * key=0x113c70d4, bool & rValue=false) Line 1569 C++
ProfUIS290md.dll!CExtHookSpy::HookSpyItem_t::IsRegistered(CExtHookSpy * pHS=0x113c70d4, unsigned long dwEHSEF=4294967295) Line 802 + 0x13 bytes C++
ProfUIS290md.dll!CExtHookSpy::HookSpyIsRegistered(const CExtHookSpy * pHS=0x113c70d4, unsigned long dwEHSEF=4294967295) Line 1826 + 0x19 bytes C++
ProfUIS290md.dll!CExtHookSpy::HookSpyIsRegistered(unsigned long dwEHSEF=4294967295) Line 267 + 0xd bytes C++
ProfUIS290md.dll!CExtHookSpy::HSLL_OnCallWindowProcIn(bool & bCallNextHook=true, long & lResult=0, int nCode=0, bool bMessageSentByCurrentThread=false, tagCWPSTRUCT * pMessageData=0x0012f444) Line 1604 + 0xa bytes C++
ProfUIS290md.dll!CExtHookSpy::HookSpyItem_t::SHS_HookCallWindowProcIn(int nCode=0, unsigned int wParam=0, long lParam=1242180) Line 1242 + 0x27 bytes C++
user32.dll!7e431923()
[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]
user32.dll!7e44f460()
user32.dll!7e42acd1()
ntdll.dll!7c90e473()
user32.dll!7e4194be()
user32.dll!7e42c174()
user32.dll!7e42f40b()
mfc80d.dll!CComboBox::AddString(const char * lpszString=0x20fdf0a0) Line 795 + 0x44 bytes C++ What is the reason for this? how can we avoid this hit to performance? Thanks, Ron.
|
|
Technical Support
|
Jan 19, 2011 - 1:50 AM
|
You can override the CExtComboBoxBase::_CreateHelper() internal virtual method, invoke the parent class method and then remove all the hooks by invoking the HookSpyUnregister() method.
|
|
Technical Support
|
Jan 18, 2011 - 3:02 AM
|
The combo box watches for a set of messages in the CExtComboBoxBase::OnHookSpyPreTranslateMessage() for closing the filter popup list box. This filter popup list box closes when you insert 300 strings into your combo box. This means inserting 300 strings should take approximately the same time as with CExtComboBox and CComboBox controls.
|
|
Offer Har
|
Jan 18, 2011 - 5:10 AM
|
Dear Support, I don’t completely understand your argument - As you can see, each call to AddString does a lot of digging into Prof-UIS code, which is completly irrelevant to filter popup list box (which I don’t even know what it is). Is there a way to avoid this overhead which as I understand is not relevant to my combo-box? Thanks, Ron.
|
|
Vasil Georgiev
|
Jan 13, 2011 - 11:07 PM
|
Dear Prof-UIS Tech Support Team, I wrote you on the support email more than 2 weeks ago but I have not received any response about this issue. So here is the problem again:
We were notified about a problem in our product and we see that it exists in your LanguageSwitcher-u.exe sample too!
The reserve of words when we are in right-to-left mode is not done properly as it was before.
For example you can choose Arabic and check the context menu on the toolbar or menubar in your LanguageSwitcher sample, the text is the same - left oriented no matter if we select Right-to-Left or not
The check mars are moved to right the text itself is not left oriented always.
The text is shown properly in previous versions of Prof-UI in the same sample.
The problem is not just to the context menu, but we seen in all the controls in our project like : CExtLabel, ReportGrid, etc.
Thank you for your support!
|
|
Technical Support
|
Jan 20, 2011 - 8:04 AM
|
The RTL subsystem inside Prof-UIS is provided by the unicode.org consortium. This subsystem was just adopted for Prof-UIS. It’s no based on our source code and we still trying to fix the text processing in it.
If you are not using HTML formatted text with Prof-UIS classes, then you can temporarily fix the RTL problem using the following line of code invoked during app initialization: CExtRichContentLayout::g_bUseWin32ForPlainText = true;
|
|
Gevork Odabashyan
|
Jan 12, 2011 - 3:16 AM
|
Prof-UIS version 2.9.1.
When trying to drag the the dynamic bar tab in the mdi window
the dynamic bar immediately change it state from tabbed to floating, and do not rearrange dynamic tabs as expected.
So it is impossible to rearrange tabbed dynamic bars in the mdi window.
To reproduce this bug start the DynamicBars sample application and add some dynamic bars to the tabbed state.
Then try to drag one of this dynamic bars tab. The dynamic bar immediately change it state to floating.
In the earlier versions all work correct.
|
|
Offer Har
|
Jan 9, 2011 - 9:23 AM
|
Dear Support, I am trying to override this function, and get these errors:
1>c:\program files\microsoft visual studio 8\vc\atlmfc\include\afxwin.h(280) : error C2248: ’CObject::CObject’ : cannot access private member declared in class ’CObject’
1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(558) : see declaration of ’CObject::CObject’
1> c:\program files\microsoft visual studio 8\vc\atlmfc\include\afx.h(529) : see declaration of ’CObject’
1> This diagnostic occurred in the compiler generated function ’CGdiObject::CGdiObject(const CGdiObject &)’ Any idea why? all I did was returning my own font object Thanks, Ron.
|
|
Technical Support
|
Jan 11, 2011 - 8:20 AM
|
Could you show us the C++ class source code which generates the C2248 compiler error? We suspect your class uses a private class inheritance instead of the public one. I.e. probably you declared your grid class as: class TheClassB : TheClassA { . . . };
Instead of: class TheClassB : public TheClassA { . . . };
|
|
Offer Har
|
Jan 18, 2011 - 7:55 AM
|
Dear Support, Thanks - the problem was that I was trying to assign once CFont to another... the compiler is showing some error without specifying the row at which is assignment was taking place... very lame. Thanks, Ron.
|
|
Offer Har
|
Jan 9, 2011 - 8:44 AM
|
Dear Support, We need to change the font size & face in all grids (should come from our configuration system). How do we change it in one place for all cells - I guess there is a way to change the default font. We also have to make sure that the rows height will change accordingly. Thanks, Ron.
|
|
Technical Support
|
Jan 19, 2011 - 1:51 AM
|
Yes, it works with all the grids. The row height never changes automatically. But you can use BestFitRow() API.
|
|
Technical Support
|
Jan 11, 2011 - 11:15 AM
|
Please override the CExtGridWnd::OnGridCellQueryFont() method.
|
|
Offer Har
|
Jan 18, 2011 - 7:56 AM
|
Will this work for tree grids as well? will it change the row height automatically? Thanks, Ron.
|
|
Offer Har
|
Jan 8, 2011 - 2:00 AM
|
Dear Support, We use CExtGridCellColor, and when the user presses the custom button, instead of opening the color picking dialog, we get a ’?’ in the cell, and the dialog never opened. We are using 2.90. In previous version we used (2.87) it was OK. Please fix and send us the patch. Thanks, Ron.
|
|
Technical Support
|
Jan 11, 2011 - 11:37 AM
|
We fixed this in 2.91. You should switch to the latest version or update the source code for the CExtPopupColorMenuWnd class.
|
|
Daniel Verret
|
Jan 7, 2011 - 10:48 AM
|
There is a major bug in CExtGridCellDateTime. It’s not possible to switch from PM to AM by pressing "A" when hour is set to 12.
|
|
Technical Support
|
Jan 18, 2011 - 3:05 AM
|
Yes. Please drop us an e-mail to the support mail box so we will provide you with the source code update.
|
|
Technical Support
|
Jan 11, 2011 - 11:15 AM
|
Thank you for reporting this issue. The CExtDateTimeWnd::OnKeyDown() method contains the below big switch statement. Please update the source code for its last default part: default:
if( ! IsReadOnly() )
{
CString sAM = OnQueryTimeDesignatorAM();
CString sPM = OnQueryTimeDesignatorPM();
if( !sAM.IsEmpty()
&& sAM[0] == (TCHAR)nChar
&& !OnQueryTimeFormat24Hours()
)
{
INT nHour = m_dtDate.GetHour();
if( nHour >= 12 )
{
SetDateTime(
m_dtDate.GetYear(),
m_dtDate.GetMonth(),
m_dtDate.GetDay(),
nHour - 12,
m_dtDate.GetMinute(),
m_dtDate.GetSecond(),
false, true
);
m_bBlankHour = false;
}
}
else if( !sPM.IsEmpty()
&& sPM[0] == (TCHAR)nChar
&& !OnQueryTimeFormat24Hours()
)
{
INT nHour = m_dtDate.GetHour();
if( nHour < 12 )
{
SetDateTime(
m_dtDate.GetYear(),
m_dtDate.GetMonth(),
m_dtDate.GetDay(),
nHour + 12,
m_dtDate.GetMinute(),
m_dtDate.GetSecond(),
false, true
);
m_bBlankHour = false;
}
}
else
{
CExtDurationWnd::OnKeyDown(nChar, nRepCnt, nFlags);
return;
}
}
else
{
CExtDurationWnd::OnKeyDown(nChar, nRepCnt, nFlags);
return;
}
|
|
Daniel Verret
|
Jan 12, 2011 - 9:05 AM
|
Ok, I Just download Prof-UIS 2.91, made the change in the .cpp files, recompile... and now I have a new problems: First, the date/time is displayed normally thenwhen I click on the date/time to edit it, the control : Show : "1JanJanuary/12/201110:00:00AM" instead of "1/12/2001 10:00:00 AM". It is a bug in 2.91 ?
|
|
Offer Har
|
Jan 7, 2011 - 8:27 AM
|
Dear Support, I need a mode in our application in which the toolbars are non-movable - when this mode is on, the toolbars are dispalyed and cannon be dragged, so the user cannot move them and close them. Same goes to docked panels. How do we do it? Thanks, Ron.
|
|
Technical Support
|
Jan 11, 2011 - 11:16 AM
|
The following line of code locks all control bars: CExtControlBar::g_bLockAllBars = false; You can override the CExtControlBar::_DraggingIsEnabled() code virtual method to control locked state of particular control bars. The locked state is supported for all types of control bars.
|
|
tera tera
|
Jan 7, 2011 - 12:33 AM
|
Hello. Is this a bug?
Is it specifications?
It is prof2.89. When I do RowRemoveAll in "Gird" , A sort does not work normally. As for the sort key, a sort is not performed in spite of equality definitely.
 http://ifreeta.dee.cc/20110107/SampleGrid4.lzh
|