|
Maybe try Microsoft Speech SDK?
|
|
|
|
|
I am using this and have 4 columns set up number 0-3. I have tried using SetItem with an LVITEM but for some reason it isn't working. Can anyone help?
-Matt Newman
-Matt Newman
|
|
|
|
|
|
m_ctlLVDirs.InsertColumn(0, _T("Alias"), LVCFMT_LEFT, 138, 0);
m_ctlLVDirs.InsertColumn(1, _T("Directory"), LVCFMT_LEFT, 160, 1);
m_ctlLVDirs.InsertColumn(2, _T("Default File"), LVCFMT_LEFT, 80, 2);
m_ctlLVDirs.InsertColumn(3, _T("Listing"), LVCFMT_LEFT, 60, 3);
m_ctlLVDirs.SetExtendedStyle(LVS_EX_CHECKBOXES | LVS_EX_INFOTIP | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP);
LVITEM lvi;
CString strItem;
int i = 0;
for(i=0; i<10; i++)
{
int l;
l = i + 1;
lvi.mask = LVIF_TEXT;
lvi.iItem = i;
lvi.iSubItem = 0;
strItem.Format(_T("Alias %i"), l);
lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
m_ctlLVDirs.InsertItem(&lvi);
lvi.iSubItem = 1;
strItem.Format(_T("Dir %i"), l);
lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
m_ctlLVDirs.SetItem(&lvi);
strItem.Format(_T("Dir %i"), l);
m_ctlLVDirs.SetItemText(i, 1, _T("Dir"));
strItem.Format(_T("Default %i"), l);
m_ctlLVDirs.SetItemText(i, 2, _T("Default"));
strItem.Format(_T("Default %i"), l);
m_ctlLVDirs.SetItemText(i, 3, _T("FALSE"));
}
-Matt Newman
-Matt Newman
|
|
|
|
|
Matt Newman wrote:
l = i + 1;
This is your problem. The index is 0 based; the insertion method works correctly, but inserts it at position i rather than i+1. Then, the rest of the code attempts to modify item i+1 which doesn't exist.
To fix this, you can either adjust your code to use i instead of i+1, or you can use the return value of InsertItem() which is the index the item was actually inserted at.
|
|
|
|
|
Hi Matt,
I think Shog9 may have missed that you only use the variable 'l' for string formatting.
I think the SetItem here is working, the only problem is that you completely nuke the change after you've done it. You perform a SetItem on subitem 1 to set subitem 1's text to 'Dir 7', for example. Two statements on, you then set subitem 1's text to the constant string _T("Dir"). Is this what you were having a problem with? I removed the two lines:
strItem.Format(_T("Dir %i"), l);
m_ctlLVDirs.SetItemText(i, 1, _T("Dir"));
and got a list where column 1 had "Dir 1", "Dir 2" etc...
Is this what you were after?
------------------------
Derek Waters
derek@lj-oz.com
|
|
|
|
|
Are columns zero based? I had set them up zero-based so the were 0,1,2,3 and the first column would show but none of the other three. I changed it to 1,2,3,4 in all it still won't show the 2,3,4 columns.
-Matt Newman
-Matt Newman
|
|
|
|
|
What do you mean by won't show? Are the columns there? Are the fields empty?
I cut and pasted your code into a sample project and I had text in all four columns (they are 0-based), although the text for columns 1,2,3 didn't have numbers in them, just the words "Dir", "FALSE" etc.
I just thought of something - you do have the list defined as "LVS_REPORT" style and not "LVS_LIST" don't you?
------------------------
Derek Waters
derek@lj-oz.com
|
|
|
|
|
All the columns show but there isn't anything in them. And it is set as report.
-Matt Newman
-Matt Newman
|
|
|
|
|
Hmm, the only thing I can think of is that you use the return value from InsertItem in your subsequent calls:
int viInsertedAt = InsertItem(&tvi);
if (viInsertedAt != -1)
{
m_ctrlList.SetItemText(viInsertedAt, 1, _T("Dir"));
m_ctrlList.SetItemText(viInsertedAt, 2, _T("XXX"));
m_ctrlList.SetItemText(viInsertedAt, 3, _T("FALSE"));
}
viInsertedAt might not be equal to i if you have sorting or something else turned on? As I said, this code seemed to work fine for me.
------------------------
Derek Waters
derek@lj-oz.com
|
|
|
|
|
Derek Waters wrote:
int viInsertedAt = InsertItem(&tvi);if (viInsertedAt != -1){ m_ctrlList.SetItemText(viInsertedAt, 1, _T("Dir")); m_ctrlList.SetItemText(viInsertedAt, 2, _T("XXX")); m_ctrlList.SetItemText(viInsertedAt, 3, _T("FALSE"));}
I tried this and put a message box if it made it there and what number it was on and it went 0 through nine but nothing. I am totally lost.
-Matt Newman
-Matt Newman
|
|
|
|
|
What did SetItemText return?
------------------------
Derek Waters
derek@lj-oz.com
|
|
|
|
|
False
-Matt Newman
-Matt Newman
|
|
|
|
|
Right, I'm stumped. Do you want to send me your code?
------------------------
Derek Waters
derek@lj-oz.com
|
|
|
|
|
I will email you the whole project tommorrow. It about 160 KB compressed. I need to sleep now.
-Matt Newman
-Matt Newman
|
|
|
|
|
Stupid me. I was calling the function to fill the control before I declared the columns. Now it works. Thanks for trying to help.
-Matt Newman
-Matt Newman
|
|
|
|
|
(Using WTL)
How can I put multiple template params (>1) in a macro definition?
I've been using CHAIN_MSG_MAP() to pass messages to templatized base classes with ease for quite a while now. But today I decided to get a little fancy & in turn break things horribly.
Take the following as an example, the first CHAIN_MSG_MAP works, but why does the second cause a host of compiler errors?
If I use a typedef of the multiple param base class, all will work - but why? There has got to be a method that feels less like a hack.
////////////
template <class T>
class CWorks
{
public:
BEGIN_MSG_MAP(CWorks)
END_MSG_MAP()
};
template <class T, BOOL bSomething>
class CBroken
{
public:
BEGIN_MSG_MAP(CBroken)
END_MSG_MAP()
};
class CMyWindow : public CWindowImpl<CMyWindow>,
public CWorks<CMyWindow>
public CBroken<CMyWindow, TRUE>
{
public:
BEGIN_MSG_MAP(CMyWindow)
CHAIN_MSG_MAP( CWorks<CMyWindow> )
CHAIN_MSG_MAP( CBroken<CMyWindow,TRUE> )
END_MSG_MAP()
};
|
|
|
|
|
CHAIN_MSG_MAP( CBroken<CMyWindow,TRUE> )
Use a typedef to get rid of the comma (which is the source of the problem).
typedef CBroken<CMyWindow,TRUE> theBrokenClass;
CHAIN_MSG_MAP( theBrokenClass )
--Mike--
http://home.inreach.com/mdunn/
#include "witty_sig.h"
your with and
|
|
|
|
|
Hi all!
I made a tree in my dialog. I successfully inserted a few nodes to the tree. The problems arise when I try to access the node that is being selected. I always get a NULL pointer when I try to get the handle to the selected node. Can any one tell me what I miss?
When I insert the nodes, I ignore the *hItem* entry. Is it the cause, if so , how do you fix this?
Here is what I did. I used 2 ways and they both give me a null pointer return:
void CMyDlg::OnClickTreeview(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
HTREEITEM hSelectedNode =
pNMTreeView->itemNew.hItem;
//get the handle to the selected node
if (!hSelectedNode)
AfxMessageBox("fail to get the handle");
else
AfxMessageBox("Get the handle OK");
}
//*****************************
another way is:
CTreeCtrl * pTree =
(CTreeCtrl*) GetDlgItem(IDC_TREE);
HTREEITEM hSelectedNode =
pTree->GetSelectedItem();
//*******************************
Thank You
Vu
vucsuf
|
|
|
|
|
Here's some bits for you.
Changed selection
void CExIncView::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
TVITEM ThisID;
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
//get itemID.
ThisID = pNMTreeView->itemNew;
//Some extra bits for you
GetTreePath();
SetFileList();
*pResult = 0;
}
Traverse tree creating a tree path string
void CExIncView::GetTreePath()
{
CString lString;
CString sTemp,sTemp2;
HTREEITEM lItem;
DWORD Code;
lItem = m_pDirTree.GetSelectedItem();
sTemp = m_pDirTree.GetItemText(lItem);
Code = m_pDirTree.GetItemData(lItem);
lString = sTemp;
while( (lItem=m_pDirTree.GetParentItem(lItem)) != NULL )
{
sTemp = m_pDirTree.GetItemText(lItem);
Code = m_pDirTree.GetItemData(lItem);
//can make use of the ItemData to trigger different
// code branches and pass some bit data
sTemp2 = lString;
lString.Format("%s\\%s",sTemp, sTemp2);
}
m_Filename = lString;
// UpdateData(FALSE);
}
Find a string item in my tree. Actually I nearly always keep tree data in a CList or one of its type,
seaches in a control with a lot of data can be slow for everyday use. Plus, you can store TV_ITEM objects
in your List as items are added so that you can search and then select you tree item very quickly.
This first function just shows a way to traverse. It calls a 2nd which finds the item by name
Only put this as a quick way to change my Clist search to a tree search
const int MAX_ITTERATIONS = 100;
void CExIncView::FindInTree(CString &sText)
{
bool Done = FALSE;
int j,Pos;
char *lTreeNames[MAX_ITTERATIONS];
CString lString;
//split the directory name into individual strings
for(j=0;j
|
|
|
|
|
Hi There!
Thank you for your help. The problem I have is different. I have a tree structure in the background. I then use SetItemData() to hook each node to a node in my backGround tree. When a node of CTreeCtrl is clicked, I display the coresponding node data in my backGround Tree. In the OnClick() event, I need to get the handle to the node that is selected. The problem I am having is that getSelectedItem() returns NULL at the beginning. After a few clicks, it seems to give me correct handle. I don't know if the search process is too slow or because the SetItemData screw me up. Do you have any clue?
Thanks
Vu
vucsuf
|
|
|
|
|
I suspect that you are trying to GetSelectedItem() actually between the change, there's a point at which none is selected.
You wrote the function as getSelectedItem(), are you doing this in java? You, you trator you (only joking man).
Anyway, check there is a selection first then with maybe a hit test.
We do it for the joy of seeing the users struggle.
|
|
|
|
|
I'm working on an app that will have a buttload of custom controls, using bitmaps, etc. I need to be able to change the appearance of the scrollbar to match. If I have to, I'll do my own scrollbar from the ground up, using bitamps, but that will be a lot of work.
So I'm looking intoi just changing te colors of the standard oolbar. I know this can be donw, I've seen it on some web sites - and I believe this is just IE using some varioation of the stardard scrollbar. But I can't see how it's done. The stuff in the FlatScrollbar APIs only allows me to change the background color of the scrollbar, and that really doesn't look very good.
Can anyone give me a clue?
Thanks -
|
|
|
|
|
i think you are not interested in my opinion towards colored scrollbars (HORRIBLE).. so i let it be..
paul di lascia wrote an article bout that in the november issue of the msdn mag.. maybe this helps you..
http://www.msdn.microsoft.com/msdnmag/issues/01/11/c/c0111.asp
hope this helps..
bernhard
"There are three roads to ruin: women, gambling and technicians. The most pleasant is with women, the quickest is with gambling, but the surest is with technicians." Georges Pompidou
|
|
|
|
|
Actually, I am interested in your opinion, and I do agree with you: colored crollbars, as implemented on many Web pages, are ugly and worthless. (I even came across a page describing how to create scrollbars that flash in multiple colors.. my god, whatever happened to tasteful design?)
Anyway, what I want to do is include scrollbars inside a heavily bitmapped interface, and I'd like the colors to match the bitmap, rather than the Windows color scheme.. so I can plead an exception to the above.
In any case, it looks like this is not supported in Windiws; Paul's article esentially states that if you want to do anything worthwhile, I'd have to code the thing from scratch, which is what "im trying to avoid.
All the above notwithstanding.. thanks for the pointer.
|
|
|
|
|