|
All these examples and none of them come close to satisfying your request. Amazing.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
[DllImport("user32")] static int SendMessage(HWND^hwnd, int wMsg, int wParam, IntPtr^lParam);
How do I use this C# in C++?
|
|
|
|
|
|
I've been using XML to persist my data structures. But now as the amount of data I process and the small numbers of changes I make to the data...
Flushing it out as XML has become VERY TIME CONSUMING. At least it is in one 12MB file...
There must be a better way!
Any good alternatives out there?
- I would like to store "tree data" (maps within maps)
- I would like to have quick disk write for small changes...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
Peter Weyzen<br />
Staff Engineer<br />
<a href="http://www.soonr.com">SoonR Inc -- PC Power delivered to your phone</a>
|
|
|
|
|
Hi
Can I change the title and icon of a given dialog box at run time?
Thanx
|
|
|
|
|
About the icon... I am not sure, but the title can be done with SetWindowText .
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
Nelek already answered about the title. For the icon try
SetClassLong(hWnd, GCL_HICON, (LONG) hNewHicon);
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
But this is to be used once the dialog is already created and shown or by the creation? In a project I was changing icons as well but in the CChildFrm when creating the View, so with size and styles.
Greetings.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
“The First Rule of Program Optimization: Don't do it. The Second Rule of Program Optimization (for experts only!): Don't do it yet.” - Michael A. Jackson
|
|
|
|
|
CWnd::SetIcon()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
Peter Weyzen<br />
Staff Engineer<br />
<a href="http://www.soonr.com">SoonR Inc -- PC Power delivered to your phone</a>
|
|
|
|
|
Or you can use of WM_SETTEXT and WM_SETICON.
|
|
|
|
|
Hi ,
i coded a working treeview(SDI/Windows Explorer Style), but hardly without icons, there is shown only one icon in my treeview.
Pic :
http://filehosting.at/images/download.php?file=b14ad20aa1a01412004995061e3202bb
I want to show the original explorer icons in my treeview so i tried it with
SHGetFileInfo()
...but it won't work
Here is some sample code (i don't want to post too much):
1. This function detects the drives and labels :
void CLeftView::CreateRoots()
{
CString strMessage;
int nPos = 65;
CString strDrive;
TCHAR szLabel[128];
DWORD dwVolumeSerialNumber;
DWORD dwMaxNameLength;
DWORD dwFileSystemFlags;
TCHAR szFileSysName[128];
UINT uDriveType;
CString cstrWirDir;
TCHAR infoBuf[INFO_BUFFER_SIZE];
DWORD dwDriveList = GetLogicalDrives ();
GetWindowsDirectory(infoBuf, INFO_BUFFER_SIZE);
cstrWirDir = infoBuf;
cstrWirDir = cstrWirDir.GetAt(0);
cstrWirDir = cstrWirDir + ":";
while (dwDriveList)
{
if (dwDriveList & 1)
{
strDrive = "?:\\";
strDrive.SetAt (0,nPos);
uDriveType = GetDriveType(strDrive);
GetVolumeInformation (strDrive, szLabel,
sizeof( szLabel ) - 1,
&dwVolumeSerialNumber,
&dwMaxNameLength,
&dwFileSystemFlags,
szFileSysName,
sizeof( szFileSysName ) - 1);
switch(uDriveType)
{
case 2:
strDrive = strDrive.Left(2);
InsertFileItem("3½-Diskette (" + strDrive +")");
break;
case 3:
strDrive = strDrive.Left(2);
InsertFileItem((CString)szLabel + " (" + strDrive +")");
break;
case 5:
strDrive = strDrive.Left(2);
InsertFileItem((CString)szLabel + " (" + strDrive +")");
break;
default:
break;
}
}
dwDriveList >>= 1;
nPos++;
}
}
2. This function should build the tree with all the icons :
void CLeftView::InsertFileItem(const CString sFile)
{
CTreeCtrl &trCtrl = this->GetTreeCtrl();
trCtrl.SetImageList(&m_SysImageList.GetImageList(), TVSIL_NORMAL);
SHFILEINFO sfi;
SHGetFileInfo(sFile, 0, &sfi, sizeof(SHFILEINFO),SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
int nIconIndex;
nIconIndex = sfi.iIcon;
CString sTemp = sFile;
TV_INSERTSTRUCT tvis;
ZeroMemory(&tvis, sizeof(TV_INSERTSTRUCT));
tvis.hParent = TVI_ROOT;
tvis.hInsertAfter = TVI_LAST;
tvis.item.mask = TVIF_CHILDREN | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT;
tvis.item.pszText = sTemp.GetBuffer(sTemp.GetLength());
tvis.item.iImage = nIconIndex;
trCtrl.InsertItem(&tvis);
sTemp.ReleaseBuffer();
I don't know if it is enough code or not to detect my mistake so i uploaded a very small project (only the treeview with my code) here :
[url]http://www.filehosting.at/files/download.php?file=1cadb172342f4f83577c45e72addfc42[/url]
Thank you very much for your help
best regards
Cocodile Buck
|
|
|
|
|
CrocodileBuck wrote: SHGetFileInfo(sFile, 0, &sfi, sizeof(SHFILEINFO),SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
When you create the tree control, you need to call SHGetFileInfo with SHGFI_SYSICONINDEX | SHGFI_SMALLICON , and get the return value, which is a handle to the system image list. You then need to set your tree view's small icon image list to be the system image list. After that, your tree view should show the right icons. The code would be something like this:
HANDLE hSystemImageList = SHGetFileInfo(sKnownFile, 0, &sfi, sizeof(SHELLFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
trCtrl.SetImageList(CImageList::FromHandle(hSystemImageList), TVSIL_NORMAL);
Nathan
|
|
|
|
|
Hi Nathan ,
thanx for your quick reply.
But when I try your 2 lines of code it won't work.
There will not be any error message, there are simply no icons in the tree !
My coding skills aren't as good as yours!
Perhaps, if it is not too much effort you could have a closer look to my code which i have uploaded and implement the code how and where it has to be?
I really tried it to build up this view for 2 day's, i'm not too lazy i simply couldn't get it to work
Please help me
Thank and best regards
Crocodile Buck
|
|
|
|
|
Lazy reply:
Go check my article on detecting drives - it has code for showing drive icons, etc.
And read the comments, where most of that information came from.
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
Hi Mr. Clarke,
i know your article, and it is very good.
I can show the drive letters and the lablels that's not the problem. I know how to detect the drives etc.
The Problem is that i couldn't show the system icons.
I think there is something wrong with my SytemImageList , i think there are not enough icons in it, or not the right icons !
Perhaps if you have a look at the small sample i have uploaded, it will take you only seconds to detect and terminate the mistake!
Thanx for your quick reply
best regards
Crocodile Buck
|
|
|
|
|
I solved the Problem
Best regards
Crocodile Buck
|
|
|
|
|
CrocodileBuck wrote: I solved the Problem
Glad to hear it - I was just going through my emails, and had some spare time so was going to attack your code.
What was the solution in the end?
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
I have this in C#
[DllImport("user32")]
public static extern int SendMessage(HWND hwnd, int wMsg, int wParam, IntPtr lParam);
and I dont know what is its equivalent in C++.
|
|
|
|
|
It's simple to use on the c++ dont need to load any dll file or library file.
LRESULT SendMessage(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam );
|
|
|
|
|
it shows me an error in 'UINT' do i have to specify something else before this code?
|
|
|
|
|
How did you use it? can you show your code?
|
|
|
|
|
public ref class Win32{
private: Win32() { }
public:
literal int WM_USER = 0x400;
literal int WM_PAINT = 0xF;
literal int WM_KEYDOWN = 0x100;
literal int WM_KEYUP = 0x101;
literal int WM_CHAR = 0x102;
literal int EM_GETSCROLLPOS = (WM_USER + 221);
literal int EM_SETSCROLLPOS = (WM_USER + 222);
literal int VK_CONTROL = 0x11;
literal int VK_UP = 0x26;
literal int VK_DOWN = 0x28;
literal int VK_NUMLOCK = 0x90;
literal short KS_ON = 0x01;
literal short KS_KEYDOWN = 0x80;
[StructLayout(LayoutKind::Sequential)]
ref struct POINT
{ public: int x, y;}
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
};
|
|
|
|
|
If you just want to call the win32 API in C++, you don't need all that garbage stuff.
The symbols for windows messages are in header files that you just include and to call SendMessage() you just do something like this...
::SendMessage(hWnd,WM_SOMEMESSAGE,wParam,lParam);
|
|
|
|
|
letueros wrote: LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); //This is what you told me
Yeah thats right.I think this little code is helpful for you and also for some messages you dont need to declare them like WM_PAINT/WM_KEYDOWN,...
class win32
{
public:
win32()
{
}
void Changecaption(HWND hwnd,UINT m_Message);
};
void win32::Changecaption(HWND hwnd,UINT m_Message)
{
SendMessageW(hwnd,m_Message,0,(WPARAM)_T("Hi how are you"));
}
win32 m_cTest;
m_cTest.Changecaption(m_hWnd,WM_SETTEXT);
|
|
|
|
|
C++ is different with C# some things are easy and some things are difficult to use.
|
|
|
|