|
Taking each problem separately, you can adjust the indent width with the TVM_SETINDENT message, which may help the display of deeper trees.
If by you mean toggling visiblity, you mean removing an item and its subtree entirely, or just hiding its label and child items? You might be able to get away with just collapsing the item, or you can even remove the entire subtree of necessary, adding it back and redrawing as necessary.
Each tree item can have its own icon. A little "Custom Draw" magic can be used to render additional visual information as well.
Multiple selection can be simulated by using the TVIS_DROPHILITED item style (setting and later checking for it).
There are a few articles here that talk about using a custom TreeView control, as well as one or two ways to use a ListView control as a multi-column tree control.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
Thanks for the help!
By the way,
What I meant by visibility is more like the the EYE icon you see in Photoshop, where it acts like a Check Box. If you enable the box, it will cause that layer to be rendered (elsewhere in the main window; not directly related to tree view). If disabled, then that branch of the hierarchy will be ignored when rendering the items in the main window.
ex: GUI navigator
[] = icon / bitmap
# = a check box to determine if the branch should be rendered in the main frame
> = collapsed node
V = expanded node
Y = (optional) item has script assigned to it
Z = (optional) item has mouse/key events that it's listening for
-------------------------------
| Navigator |
-------------------------------
| [#]V ROOT [ ][ ] |
| [#]> CHILD 1 [ ][Z] |
| [#]V CHILD 2 [Y][ ] |
| [ ] SUB-CHILD [Y][Z] |
-------------------------------
I appreciate the help, it definitely gives me a solid direction to take now.
If only I could have done it in ASCII I'd be done by now. hehe.
|
|
|
|
|
TVM_SETINDENT seems to be clamping the results to 15 or larger for some reason. This is not a huge issue as I've decided to write a custom owner draw for the tree; based on the VividTree article. I nudge the RECT region back by a fixed indent; based on the results I get back from GetItemRect() for each item.
TVIS_DROPHILITED worked great! I got it to behave exactly as I intended.
Going the route of Owner-Draw was a bit more of a hassle but it really let me tweak the visuals.
[ question ]
Does TreeCtrl not support double clicking?
<br />
...<br />
afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);<br />
afx_msg void OnDblClick(NMHDR* pNMHDR, LRESULT* pResult);<br />
<br />
...<br />
ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblClick)
END_MESSAGE_MAP()<br />
Thanks again,
- Ben
|
|
|
|
|
Hello community! I have a little program that I run with another (already existent) program, which I do not have source code to.
I just want to run both programs with one click, so I wonder if there is a command I can add at the top of the main file? Something like:
int main(){
run("game.exe");
... //more code here
if you get my drift.
OK I got it to work with shellexecute BUT I can only open the exe if I have them both in the same folder.
HWND m_hWnd;
ShellExecute(m_hWnd,"open","game.exe","", "", SW_SHOW);
//that works but only if they are both in same folder.
If I provide another directory like:
ShellExecute(m_hWnd,"open","C:\\Program Files\myproj\game.exe","", "", SW_SHOW);
(it is the right directory) it won't work...
-- modified at 13:16 Friday 9th February, 2007
|
|
|
|
|
Maddack wrote: I just want to run both programs with one click, so I wonder if there is a command I can add at the top of the main file? Something like:
Maddack wrote: Perhaps there is a way to do this in windows instead of c++?
Do you mean like a batch file?
The batch command start could help you.
On an console, type help start
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
|
Shellexecute() or CreateProcess()
Dario: How is "directory" in French? (I mean a file system directory).
John Simmons: "zee file holdaire thingie"
|
|
|
|
|
Can you make a project with c++ if yes simply use of Shellexecute /ShellexecuteEx /CreateProcess
|
|
|
|
|
You need to escape all backslashes in string literals - your path to game.exe doesn't do that.
|
|
|
|
|
try this
ShellExecute(m_hWnd,"open","C:\\Program Files\\myproj\\game.exe","", "", SW_SHOW);
Sethuraman.K - Bangalore
|
|
|
|
|
Hello Comunity,
i have an simple SaveAs dialog in my project to save some information in to files!
Ok,but i need some extra controls on this one,
is there any way to modify this standard SaveAs dialog?
E.g. add some new controls to this, button , checkbox, listbox etc.?
Thanks for any help!
regards
break;
|
|
|
|
|
Have you tried adding the control is the hook function? It's just a taad more complicated than creating your own (that resembles the standard one).
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hello,
thanx for answer, no, i dont try nothing with hooks, that because i never do something with hooks,
but i hear about hook function, maybe i can find som instructions how to use hook functions?
regards
break;
|
|
|
|
|
Yes - you do this by creating a new dialog template and placing your new controls around special control/identifiers (stc1 , stc2 , etc.) that represent the standard controls on the interface.
Look up "Open and Save As Dialog Box Customization" in MSDN for more information.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
Hello,
thanks for answer, i try to use one of the sugestions here...
regards
break;
|
|
|
|
|
Yes. See these articles for ideas:/ravi
|
|
|
|
|
Hello Ravi,
thanks for url's, i think the second link, easy image preview, is good stuf to beginn wit own sample!
regards
break;
|
|
|
|
|
Yes you can you need to stc1 here is articles about it
|
|
|
|
|
Clickety[^]
-- modified at 23:40 Friday 9th February, 2007
Dario: How is "directory" in French? (I mean a file system directory).
John Simmons: "zee file holdaire thingie"
|
|
|
|
|
Which helps the OP how?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Ah you are right, I was sure he once wrote an article on it. Looking at the title, I just snatched(mistakenly) it. Oops, wait a min, I'll update the clickety.
Dario: How is "directory" in French? (I mean a file system directory).
John Simmons: "zee file holdaire thingie"
|
|
|
|
|
I have the following code :
class Test
{
public:
static const foo = 1;
static const bar = 2;
};
int _tmain(int argc, _TCHAR* argv[])
{
cout << Test::foo << endl << Test::bar << endl;
return 0;
}
- and absolutely no idea why it is working. I left the type declaration by accident and realized later that it shouldn't work - at least in my book. But it does. Can anyone explain that to me ? Is there some kind of default data-type for such situations ? If so, what is it ?
wbr Brainley
|
|
|
|
|
If you mean why does this get treated like a const int, that is because that is exactly what you created when you typed const foo .
I believe that int is treated as the default type in a scenaro like this, which is why you sometimes see code like unsigned uiABC = 0 to create an unsigned int variable.
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
I wonder if it would be treated as a QWORD on a 64-bit machine
|
|
|
|
|
Not if they keep the width of the int type at 32-bits... But I do not have a 64-bit environment handy...
Peace!
-=- James Please rate this message - let me know if I helped or not!<HR> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|