Subject |
Author |
Date |
|
tera t
|
Mar 24, 2008 - 7:33 PM
|
Hello. I carry out the following order. void CMuPropertyGridWnd::BestFitColumnAll()
{
int iRec;
for ( iRec = 0 ; iRec < ColumnCountGet() ; iRec++ ){
BestFitColumn( iRec );
}
} It is not done Fit well.
")" is not displayed.
|
|
Technical Support
|
Mar 26, 2008 - 12:11 PM
|
The tree grid windows inside the property grid control are resizing their columns in its own manner. For example, if you want to make the property name column taking up 40% space and the property value column taking up 60% space: CExtPropertyGridCtrl & wndPGC = . . .
CTypedPtrArray < CPtrArray, CExtPropertyGridWnd * > arrGrids;
wndPGC.OnPgcQueryGrids( arrGrids );
INT nGridIdx;
for( nGridIdx = 0; nGridIdx < arrGrids.GetSize(); nGridIdx ++ )
{
CExtPropertyGridWnd * pPGW = arrGrids[ nGridIdx ];
ASSERT_VALID( pPGW );
pPGW->SetProportionalColumnWidth( 0.4 ); // 40%
}
|
|
tera t
|
Mar 24, 2008 - 7:04 PM
|
|
|
Technical Support
|
Mar 26, 2008 - 12:14 PM
|
You docked one of your bars at the right side of the main frame window using the CExtControlBar::DockControlBarInnerOuter() method and then you docked the second bar relative to first one using CExtControlBar::DockControlBarLTRB() . If you make the first bar floating using the CExtControlBar::FloatControlBar() method, then the second bar will follow the first one. But it’s not possible to make the second bar linked to first one when the userl drag-n-drops one of them if both bars are not organized into one tabbed container. If you need both the property grid and drawing windows demonstrated on your screenshot be constantly one near other and you need a separator between them, then you should use only one resizable control bar, create a CExtSplitterWnd window inside it and create both property grid and drawing windows as splitter panes.
|
|
tera t
|
Mar 24, 2008 - 6:53 PM
|
|
|
Technical Support
|
Mar 26, 2008 - 12:15 PM
|
This feature is not supported at the moment because text grid cells representing the property value names (the CExtPropertyGridCellArea grid cell class) currently are not colorizable. We can regard your message as a feature request.
|
|
Offer Har
|
Mar 24, 2008 - 8:43 AM
|
Dear Support, I tried to use this paint manager, and I see that most UI components do not egt skinned, for example the scroll-bars looks like windows 2000, the non-client of a dialog remain in their dull XP look. Is this the way it should look, or should I do something beside calling: g_PaintManager.InstallPaintManager(RUNTIME_CLASS(CExtPaintManagerStudio2008));
Thanks, Ron.
|
|
Technical Support
|
Mar 26, 2008 - 2:14 PM
|
The CExtPaintManagerStudio2008 paint manager class is very similar to CExtPaintManagerStudio2005 . The differences are as follows:
1) On Windows XP the CExtPaintManagerStudio2008 paint manager class simply draws a bit different popup menu and provides semi-transparent hover based markers like Visual Studio 2008 does.
2) Under Windows Vista it provides more different UI look and completely new docking markers.
These paint managers do not affect scroll bars nor the window non-client areas. If you need skinned Windows XP/Vista scroll bars, then you should not forget to include the manifest resource.
|
|
tera t
|
Mar 21, 2008 - 8:08 PM
|
Hello. I want to acquire double type.
I do such how to use.
Does not how to use have any problem? double CPKD_PropertyNunoKisoInp1Dlg::_Henshin()
{
CExtGridCellNumber * pCellNumber =
(CExtGridCellNumber *)m_pActPGC->PropertyBodyGridCell( m_pPI_Offset ); return pCellNumber->dblVal; ?
}
|
|
Technical Support
|
Mar 26, 2008 - 9:56 AM
|
Note it is better to access a pCellNumber->dblVal value using the following code: V_R8( pCellNumber );
|
|
Technical Support
|
Mar 22, 2008 - 3:04 PM
|
Here is the declaration of the CExtGridCellNumber class: class __PROF_UIS_API CExtGridCellNumber : public CExtGridCellNumberBase
{
. . .
Here is the declaration of the CExtGridCellNumberBase class: class __PROF_UIS_API CExtGridCellNumberBase : public CExtGridCellVariant
{
. . .
Here is the declaration of the CExtGridCellVariant class: class __PROF_UIS_API CExtGridCellVariant
: public CExtGridCellEx
, public VARIANT
{
. . . So, you can use the following code: CExtGridCellNumber * pCell = . . .
double lfValue = pCell->dblVal;
|
|
Offer Har
|
Mar 21, 2008 - 2:13 PM
|
Dear Support, When I set these two together, I though that the selecetd bxo would extend untill the right side of the window, but it doesn’t, it ends at the right most cell. Can you implemented this feature? I think it is required... Thanks, Ron.
|
|
Offer Har
|
Mar 22, 2008 - 4:06 PM
|
Dear Support, Let me know if it is clear now - the first line is selected, and the blue selection ends at the last cell:
|
|
Technical Support
|
Mar 22, 2008 - 3:05 PM
|
It would be handy to take a look at a screenshot demonstrating how would you like to improve empty area lines in the grid.
|
|
Offer Har
|
Mar 21, 2008 - 1:37 PM
|
Dear Support, I have a tree control in which I have several root items, each have sub-items. I use ItemHide to show/hide some of these sub-items. I see that after I hide some nodes and show them again, they are displayed in the wrong place in the tree, and the tree is completly messed up. Please verify and fix. Thanks, Ron.
|
|
Technical Support
|
Mar 26, 2008 - 2:09 PM
|
We are working on the fix for item hiding algorithm
|
|
Offer Har
|
Mar 26, 2008 - 2:12 PM
|
Good to know that you’re alive
|
|
Technical Support
|
Mar 22, 2008 - 3:02 PM
|
You can see how tree item hiding is used in the tree filtering algorithm in the FilteredGrids sample. We do not see any problems with the tree structure there. If the ItemHide() can damage tree data, then we need some code or a test project which reproduces this problem.
|
|
Offer Har
|
Mar 25, 2008 - 10:17 AM
|
Dear Support, I sent you a sample application, all I ask is that you’ll let me know that you received it... I guess this is too much to ask. Maybe today you will do me the honor and let me know that you received it? Ron.
|
|
Offer Har
|
Mar 23, 2008 - 8:41 AM
|
Dear Support, I managed to create a sample application that re-produces the bug. Please let me know that you received it. Below is the output I get when I run the application and do two simple steps that I explained you in the mail:
|
|
Offer Har
|
Mar 22, 2008 - 4:07 PM
|
I will generate a sample application and send you.
|
|
Offer Har
|
Mar 21, 2008 - 9:18 AM
|
Dear Support, I get assent in the tree control in this place:
void CExtTreeGridCellNode::TreeNodeHiddenSet(
CExtTreeGridDataProvider & _DP,
bool bHide
)
{
ASSERT_VALID( this );
ASSERT_VALID( (&_DP) );
ASSERT_KINDOF( CExtTreeGridDataProvider, (&_DP) );
bool bHidden = TreeNodeHiddenGet();
if( ( bHidden && bHide ) || ( (!bHidden) && (!bHide) ) )
return;
if( bHide )
{
if( TreeNodeIsDisplayed() )
{
ULONG nOffset = TreeNodeCalcOffset( true, false );
if( nOffset != ULONG(-1L) )
{
ASSERT( _DP.m_arrGridVis[ nOffset ] == this ); <=== HERE
Sometimes I get this assert, and sometimes not.
Can you please explain why this happens? If I ignore the assert, the whole structure of the tree is messed up...
Thanks, Ron.
|
|
Technical Support
|
Mar 22, 2008 - 3:05 PM
|
We need a test project or at least a test function which generates this assertion.
|
|
Chun Pong Lau
|
Mar 20, 2008 - 10:16 PM
|
Dear Support Team, I would like to add a graphical meter in CExtStatusControlBar. 1) How can I do it initially? 2) How can I update this with another image afterwards? Thanks a lot. Best regards, Chun Pong
|
|
Chun Pong Lau
|
Mar 23, 2008 - 1:03 PM
|
|
|
Technical Support
|
Mar 22, 2008 - 12:13 PM
|
If the graphical meter is a CWnd -based control then yes, it can be added to the status bar. Take a look at the CExtStatusControlBar::SetPaneControl() method.
|
|
tera t
|
Mar 20, 2008 - 8:56 PM
|
Hello. I carry out the following order. void CMuPropertyGridWnd::BestFitColumnAll()
{
int iRec;
for ( iRec = 0 ; iRec < ColumnCountGet() ; iRec++ ){
BestFitColumn( iRec );
}
}
It is not done Fit well.
")" is not displayed.
http://www.yukai.jp/~ifreeta/20080321/image01.jpg
|
|
Technical Support
|
Mar 26, 2008 - 9:51 AM
|
The image’s URL is broken. Please explain the details.
|
|
Daisy Peterson
|
Mar 20, 2008 - 4:53 PM
|
I am using SetButtonCtrl to put a combo box onto a toolbar. This is fine, it works. However, when the user brings up the customize dialog a placeholder icon is used (just a square), and if the user drags that to a toolbar, that’s all that appears in the toolbar as well. 1) How do I make the new user button into a combo box? (Is there a message telling me the user has dragged a button to a toolbar, is a callback utilized in this case, etc.?) 2) Can the customize dialog show the combo box instead of the icon? Thanks, Kevin Murray AGI
|
|
Technical Support
|
Mar 26, 2008 - 9:55 AM
|
The CExtToolControlBar::SetButtonCtrl() method attaches a window handle to a toolbar button. This method relates mostly to non-customizable toolbars. Although customizable toolbars can have windows attached to their buttons, it’s not recommended because a similar feature is not supported by menus and customization subsystem does not know how to clone and synchronize several copies of such buttons. So please use built-in text/combo fields instead of combo box common controls attached to toolbar buttons. The combo boxes in the StyleEditor sample are not combo box windows but rather built-in combo field buttons for toolbars and menus. You can note you can create several copies of a combo box in toolbars and menus and they will be automatically synchronized plus you will see combo box line items in the Customize dialog. The CMainFrame::OnCreate() method in the StyleEditor sample demonstrates how to initialize combo fields. The combo fields do not contain any data, neither text field’s string nor collection of strings for the popup list box. These data is provided to combo fields through overridden CExtCustomizeSite::OnPopupListBox***() and CExtCustomizeSite::OnTextField***() virtual methods in the CMainFrame class. This design allows you to provide all the copies of each text/combo field with the same data and, as result, the text/combo fields become always synchronized.
|
|
Ian McIntosh
|
Mar 20, 2008 - 10:20 AM
|
Hi, I have just tracked down a somewhat puzzling problem. I found some code in a handler of an ON_BN_CLICKED being called from within itself. I traced this down to a call to CExtSlider::SetBkColor(). The call stack shows ProfUIS283md.dll!CExtSliderWnd::SetBkColor(unsigned long clrBk=2162687) Line 89 C++ calls:
ProfUIS283md.dll!CExtSliderWnd::UpdateSliderWnd() Line 472 + 0xc bytes C++ the line is:
::SetFocus( hWndOwn );
and this seems to trigger an ON_BN_CLICKED. Do you have any ideas why this is?
|
|
Technical Support
|
Mar 22, 2008 - 12:20 PM
|
It is not clear what the ON_BN_CLICKED handler is called. You can find an example of using CExtSliderWnd in the FunnyBars sample. Would you reproduce the problem using this sample and sent the modified project to us?
|
|
Offer Har
|
Mar 20, 2008 - 10:10 AM
|
Now that the forum is upgraded, is time to answer all unanswered question...
|
|
tera t
|
Mar 18, 2008 - 9:05 PM
|
|
|
Technical Support
|
Mar 19, 2008 - 6:51 AM
|
We have provided you with several answers today. We described in details how to modify property values and update them in the property grid control without complete rescanning of the property store.
|
|
tera t
|
Mar 18, 2008 - 9:06 PM
|
|
|
tera t
|
Mar 18, 2008 - 7:54 PM
|
Hello.
With indirect cell pCellNumber, I want to change only the following item to 100. http://www.yukai.jp/~ifreeta/20080319/image20.jpg
CExtPropertyItem * pShitenX = new CExtPropertyValue( _T( m_csName_ShitenX ) ); pCellNumber = STATIC_DOWNCAST( CExtGridCellNumber, pShitenX->ValueDefaultGetByRTC( RUNTIME_CLASS(CExtGridCellNumber) )); pCellNumber->_VariantAssign( 0.00 ); pCellNumber->SetAutoNumDigits( true );
Please teach it.
|
|
Technical Support
|
Mar 19, 2008 - 6:51 AM
|
You have modified the default grid cell stored in the CExtPropertyValue object. The default grid cells are never displayed in the tree grid windows inside the property grid controls. They are used for value resetting command which is available from the context menu over property values. This reset command assigns an active grid cell of the CExtPropertyValue object from the default grid cell.
|
|
tera t
|
Mar 18, 2008 - 7:18 PM
|
Hello.
I acquire a cell in the property grid directly and operate it. http://www.yukai.jp/~ifreeta/20080319/image10.jpg
CExtGridCell * CMuPropertyGridCtrl::SelectGridCell( CString csFind ) { int iRow;
CTypedPtrArray < CPtrArray, CExtPropertyGridWnd * > arrGrids; OnPgcQueryGrids( arrGrids ); if ( arrGrids.GetSize() <= 0 ){ ASSERT(0); return NULL; } CExtPropertyGridWnd * pGrid = arrGrids[ 0 ]; CString csDst;
for ( iRow = 0 ; iRow < pGrid->RowCountGet() ; iRow++){ CExtPropertyGridCellArea * pCell = (CExtPropertyGridCellArea *)pGrid->GridCellGet( 0 , iRow , 0 , 0 ); pCell->TextGet(csDst); if ( csFind == csDst){ return pGrid->GridCellGet( 1 , iRow , 0 , 0 ); } } }
However, I cannot acquire a cell when a property grid was closed. http://www.yukai.jp/~ifreeta/20080319/image11.jpg
I want to acquire a cell then. Thanks,
|
|
Technical Support
|
Mar 19, 2008 - 6:50 AM
|
You should use the active and/or default grid cells stored in the CExtPropertyValue object. The tree grid windows inside the property grid control contain cloned copies of the active grid cells from the CExtPropertyValue objects. When some grid cell inside active tree grid is edited by the user, then it’s value becomes finally assigned to the grid cell in the inactive tree grid and to the active grid cell stored inside the corresponding CExtPropertyValue object. So, you should access the active grid cell in the property value first: CExtPropertyValue * pPV = . . .
CExtGridCell * pCellSrc = pPV->ValueActiveGet();
ASSERT_VALID( pCellSrc ); Then you should modify a value of the pCellSrc grid cell and synchronize corresponding cells in the tree grid windows inside the property grid control as we described in the previous answer.
|
|
tera t
|
Mar 18, 2008 - 7:02 PM
|
Hello.
When I carry out PropertyStoreSynchronize Scroll is updated at the midway point of the position.
http://www.yukai.jp/~ifreeta/20080319/image01.jpg
Will not the screen update be possible in the state that fixed a scroll position?
Or, I acquire a scroll position beforehand. After property screen update I want to set a scroll position
Thanks,
|
|
Technical Support
|
Mar 19, 2008 - 6:49 AM
|
The CExtPropertyGridCtrl::PropertyStoreSynchronize() method completely rebuilds the content of the tree grid windows inside the property store. This method is needed when the tree structure of your property store changes seriously: the number of properties and/or categories were changed, names of properties and/or categories were changed. If your code changes the active grid cell of some property value only, then you can avoid invoking the CExtPropertyGridCtrl::PropertyStoreSynchronize() method and synchronize one property value only: CExtPropertyGridCtrl * pPGC = . . .
CExtPropertyValue * pPV = . . .
CExtGridCell * pCellSrc = pPV->ValueActiveGet();
ASSERT_VALID( pCellSrc );
// We assume your code will change
// the active grid cell inside pPV
// (which is pCellSrc) here.
CTypedPtrArray < CPtrArray, CExtPropertyGridWnd * > arrGrids;
pPGC->OnPgcQueryGrids( arrGrids );
INT nGridIdx = 0;
for( ; nGridIdx < arrGrids.GetSize(); nGridIdx ++ )
{
CExtPropertyGridWnd * pGrid = arrGrids[ nGridIdx ];
ASSERT_VALID( pGrid );
// Get HTREEITEM handle which corresponds to
// the pPV property value:
HTREEITEM hTreeItem = pGrid->PropertyItemToTreeItem( pPV );
if( hTreeItem == NULL )
continue;
// Get the destination grid cell which is cloned from
// the active cell of the pPV property value:
CExtGridCell * pCellDst = pGrid->ItemGetCell( hTreeItem, 1 );
if( pCellDst == NULL )
continue;
ASSERT_VALID( pCellDst );
// Update destination grid cell’s value:
pCellDst->Assign( *pCellSrc );
// Repaint required part of the tree grid:
if( ! pGrid->IsWindowVisible() )
continue;
LONG nRowNo = pGrid->ItemGetVisibleIndexOf( hTreeItem );
if( nRowNo < 0 )
continue;
CRect rc;
if( pGrid->GridCellRectsGet(
1,
nRowNo,
0,
0,
NULL,
&rc
)
)
{
CRect rcClient;
pGrid->GetClientRect( &rcClient );
rc.left = rcClient.left;
rc.right = rcClient.right;
pGrid->InvalidateRect( &rc );
}
}
|
|
tera t
|
Apr 16, 2008 - 7:13 PM
|
Hello. Only in InvalidateRect, there was time when it was not updated immediately.
So I carried out pGrid->UpdateWindow. pGrid->InvalidateRect( &rc );
pGrid->UpdateWindow(); Is there a problem?
|
|
Technical Support
|
Apr 18, 2008 - 3:33 AM
|
Yes, you can invoke the InvalidateRect() Win32 API many times for marking parts of window surface which needs to be repainted. Then you can invoke the UpdateWindow() Win32 API once for immediate repainting.
|
|
Jon Ort
|
Mar 18, 2008 - 8:44 AM
|
We have several control dialogs that are derived from CExtControlBar. The problem is that if these dialogs are floating instead of docked, they show up in the list of windows given by alt-tab in vista (or by using the "alt-tab replacement" powertoy - http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx).
The usual method of solving this is to give the control bar the WS_EX_TOOLWINDOW extended style, but that doesn’t work because in CExtDockMiniFrameWnd::OnWindowPosChanging the extended styles defined by:
#define __REMOVED_STYLES_EXTENDED (WS_EX_TOOLWINDOW|WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME)
are always removed from the window.
Is there a reason that WS_EX_TOOLWINDOW has to be removed, or some other way to remove a toolwindow from the alt-tab list?
I would appreciate any help you could give.
|
|
Technical Support
|
Mar 20, 2008 - 11:27 AM
|
Please put these two small modifications into the ../Prof-UIS/Src/ExtMiniDockFrameWnd.cpp file:
1) Find the following lines near beginning of this file: #define __REMOVED_STYLES_EXTENDED \
(WS_EX_TOOLWINDOW|WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME) and replace with the following lines: #define __REMOVED_STYLES_EXTENDED \
(WS_EX_STATICEDGE|WS_EX_WINDOWEDGE|WS_EX_DLGMODALFRAME) 2) Update the source code of the CExtMiniDockFrameWnd::PreCreateWindow() method: BOOL CExtMiniDockFrameWnd::PreCreateWindow( CREATESTRUCT & cs )
{
if( ! CMiniDockFrameWnd::PreCreateWindow(cs) )
{
ASSERT( FALSE );
return FALSE;
}
cs.dwExStyle |= WS_EX_TOOLWINDOW; // THIS LINE WAS ADDED
cs.dwExStyle &= ~(WS_EX_LAYOUTRTL|WS_EX_RTLREADING);
return TRUE;
}
|
|
Jon Ort
|
Mar 19, 2008 - 8:19 AM
|
|
|
Technical Support
|
Mar 19, 2008 - 6:47 AM
|
Could you provide us with the exact download link for this software. Although this product is for Windows XP and you have problems with it on Windows Vista, we can make Prof-UIS compatible with it. The tool window style was removed because this was needed for old control bar implementations in Prof-UIS. We can avoid removing this style at present.
|
|
Vincent Lin
|
Mar 18, 2008 - 7:33 AM
|
Hello~ Support Sir~
Any body home ?
Could someone answer me ?! Please !!
|
|
Technical Support
|
Mar 19, 2008 - 6:27 AM
|
We are working on performance improvements. Profiling is not quick work.
|
|
Ian McIntosh
|
Mar 18, 2008 - 7:25 AM
|
Is it possible to set the color for a CExtButton?
|
|
Technical Support
|
Mar 19, 2008 - 6:53 AM
|
You can override the following method in your CExtButton -derived class: virtual CExtPaintManager * PmBridge_GetPM() const; This method should return an instance of the required paint manager. The following template class is very handy and implements the virtual method meant above: template < class _BT > class CExtPaintManagerCustomT : public _BT
{
public:
CExtPaintManagerCustomT( CExtPaintManager * pCustomPM = NULL )
: m_pCustomPM( NULL )
{
SetCustomPM( pCustomPM );
}
~CExtPaintManagerCustomT()
{
if( m_pCustomPM != NULL )
delete m_pCustomPM;
m_pCustomPM = NULL;
}
CExtPaintManager * GetCustomPM() const
{
return m_pCustomPM;
}
bool SetCustomPM( CExtPaintManager * pCustomPM = NULL )
{
if( m_pCustomPM != NULL )
{
if( pCustomPM == m_pCustomPM )
return false;
if( m_pCustomPM != NULL )
{
delete m_pCustomPM;
m_pCustomPM = NULL;
}
}
if( pCustomPM == NULL )
{
m_pCustomPM = new __DEFAULT_PAINT_MANAGER_CLASS;
if( ! m_pCustomPM->IsKindOf( RUNTIME_CLASS( CExtPaintManager ) ) )
{
ASSERT( FALSE );
return false;
}
}
else
{
m_pCustomPM = pCustomPM;
}
m_pCustomPM->SyncSysColors();
m_pCustomPM->InitTranslatedColors();
m_pCustomPM->InitHelperBrushes();
return true;
}
bool SetCustomPM( CRuntimeClass * pRTCCustomPM )
{
if( pRTCCustomPM == NULL )
return SetCustomPM( (CExtPaintManager *)NULL );
CObject * pObj = pRTCCustomPM->CreateObject();
if( pObj == NULL )
{
ASSERT( FALSE );
return false;
}
ASSERT_VALID( pObj );
CExtPaintManager * pPaintManager = DYNAMIC_DOWNCAST( CExtPaintManager, pObj );
if( pPaintManager == NULL )
{
delete pObj;
ASSERT( FALSE );
return false;
}
return SetCustomPM( pPaintManager );
}
virtual CExtPaintManager * PmBridge_GetPM() const
{
CExtPaintManager * pPM = GetCustomPM();
if( pPM != NULL )
return pPM;
else
return _BT::PmBridge_GetPM();
}
protected:
CExtPaintManager * m_pCustomPM;
}; So, you should use the following button object: CExtPaintManagerCustomT < CExtButton > m_wndButton; And attach any required paint manager to it: m_wndButton.SetCustomPM( RUNTIME_CLASS(CExtPaintManager) );
|
|
Ian McIntosh
|
Mar 19, 2008 - 2:10 AM
|
I’m using mainly the Office 2007 themes, and it is the button color rather than text color I want to change.
If SetBkColor() doesn’t work, what should I use instead?
|
|
Technical Support
|
Mar 18, 2008 - 1:37 PM
|
Yes, you can do this using the following methods: SetTextColorDisabled
SetTextColorNormal
SetTextColorHover
SetTextColorPressed
SetBkColor Please note the SetBkColor() method works only for Office 2000/XP/2003 and Visual Studio 2005 themes. Otherwise it is useless because the buttons are based on bitmaps.
|