|
That's wrong.
Event if 'Here test prints correct value' you shouldn't rely on it.
Veni, vidi, vici.
|
|
|
|
|
Why is it wrong? As i understand test is in func() scope and it should not go out of scope before func() exits, which is AFTER the class has been initialized with it.
|
|
|
|
|
indeed test does not go out of scope there. However the temporary (created by the string object) test points to does. So temp is a valid variable pointing to garbage.
Veni, vidi, vici.
|
|
|
|
|
CPallini wrote: Passing a reference it is usually better.
AKA, pointer. Ever seen C++ code disassembled?
==============================
Nothing to say.
|
|
|
|
|
Erudite_Eric wrote: Ever seen C++ code disassembled?
Yes, of course.
However this is not a point: the same you may say comparing a C++ program with a C one.
Veni, vidi, vici.
|
|
|
|
|
From some while, I try to setup an subitem image to an virtual listview, but I don't get it ... to setup an item image I get in follow way :
if(pItem->mask & LVIF_IMAGE)pItem->iImage = 0;
but for subitem image ? I have to mention that I set LVS_EX_SUBITEMIMAGES listview style ... thank you.
|
|
|
|
|
See here[^] for details of setting the subitem.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
I read from there all, though, I don't know how to set image only for one specific column ...
|
|
|
|
|
I assume if you have added the LVS_EX_SUBITEMIMAGES property then it's just a matter of setting the appropriate status bits and links the same as for an item. Give it a try and see what happens.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Hi,
I have 2 apllications i.e. server and client which are communicating through socket.
The problem is this...When both application are connected to each other and I unplugged the network cable, no application gets notification. Can I get notification in anyway?
|
|
|
|
|
Hope this link will help you [^] or [^]
You can see the last comment which explains about keep-alive messages.
Every new day is another chance to change your life.
|
|
|
|
|
We are calling LoadLibary in C#. For this we have included the below code in the C# file.
[DllImport("Kernel32.dll")]
internal static extern IntPtr LoadLibraryW([MarshalAs(UnmanagedType.LPWStr)] String lpMdoule);
We have multiple LoadLibaryW( ) calls. All of them are passing , except one. We verified the GetLastError( ). It returns 126. But the dll is physically existing in the correct path.
What could be the reason for dll failure.
|
|
|
|
|
You might get that because the DLL you are trying to load is dependent on some other DLLs which it cannot find.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> If it doesn't matter, it's antimatter.<
|
|
|
|
|
The dll's which this dll is dependent are available in the appropriate locations. Also tried verifying them in dependencyWalker. There are no dependency erros seen in it. But still the LoadLibaryW call is failing.
|
|
|
|
|
Maybe it's a "bitness" issue, are you sure you are not trying to load -directly or indirectly- a 32 bit DLL into a 64 bit process somewhere or vica versa? Altrough i supose that ahould give a different error, but who knows, maybe when trying to load a DLL which is dependent on another DLL of which it only finds the "wrong" version then it will say "module not found". Speaking of version, could it be some versioning problem? Like the DLL this module is dependent on is some incompatible verison (like, too old)?
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> If it doesn't matter, it's antimatter.<
|
|
|
|
|
Eh, another thing i just realized, your question is not C/C++ but rather C# related, maybe you should rather ask on the C# forum.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> If it doesn't matter, it's antimatter.<
|
|
|
|
|
This is the C/C++/MFC forum. May be you should ask in the C# forum.
Common errors are typos. So check the path again. Just to be sure: The subject of your question contains the path 'C:\abc.dll' which will fail (must be 'C:\\abc.dll').
|
|
|
|
|
Show the actual full code of your failing LoadLibrary() call, including (most importantly) the string parameter.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
V K 2 wrote: "C:\abc.dll"
You know, backslashes should be escaped in quoted strings.
[update]
I see Jochen already suggested it.
[/update]
Veni, vidi, vici.
|
|
|
|
|
Has anyone attempted to use this class and call GetWindowTextLength() to see if the control has any user-typed text in it? I often use this approach to know when to enable/disable the OK button on a dialog. If the control just has the mask in it (i.e., no user-typed text), I consider the control to be empty and thus need to disable the OK button. The problem is that GetWindowTextLength() always returns the length of the mask. I can call GetWindowText() in the EN_CHANGE handler and compare the text to the mask but it always seems to be off by one. In other words, if the mask is "___" and I type a number in that control, GetWindowText() will return "___" instead of "2__".
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
|
David,
When MFC controls exhibit strange behavior I always take a look at the source code for the control located in the \VC\atlmfc\src\mfc installation path.
If you look at the Microsoft implementation within afxmaskededit.cpp you will find that the CMFCMaskedEdit class handles the WM_GETTEXTLENGTH,WM_GETTEXT and WM_SETTEXT messages overriding the default CWnd behavior. The CMFCMaskedEdit class is actually returning the length of an internal CString buffer in response to the WM_GETTEXTLENGTH message.
Therefore the Microsoft documentation that states: 'EN_CHANGE notification code is sent when the user has taken an action that may have altered text in an edit control. Unlike the EN_UPDATE notification code, this notification code is sent after the system updates the screen.' would not apply to this particular window class.
Unfortunately you will have to implement something outside the box here. A couple of ideas:
Option [1] Highlight all of the code in afxmaskededit.cpp and afxmaskededit.h and copy/paste into DavidCrowsMaskedEdit new class and change/improve the behavior.
Option [2] You could override PreTranslateMessage and check for the WM_KEYUP message belonging to the CMFCMaskedEdit control. Once the control has recieved this message... the CMFCMaskedEdit should have updated its internal buffer because it does its filtering in response to the WM_CHAR message. Note that this method will not handle copy/cut/paste from the clipboard so your mileage may vary.
BOOL YourMaskDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_KEYUP == pMsg->message)
{
if(::GetDlgCtrlID(pMsg->hwnd) == m_YourMaskEdit.GetDlgCtrlID())
{
int iLength = m_YourMaskEdit.GetWindowTextLength();
if(iLength)
{
CString str;
m_YourMaskEdit.EnableGetMaskedCharsOnly(TRUE);
m_YourMaskEdit.GetWindowText(str);
str.Remove(_T('_'));
BOOL UserAddedText = str.GetLength();
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
Option [3] You could actually get the window text or text length in your WM_CTLCOLOR handler. Something like:
HBRUSH YourMaskDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(pWnd->GetDlgCtrlID() == m_YourMaskEdit.GetDlgCtrlID())
{
}
return hbr;
}
I know it seems like a complete hack... by looking at window text in the WM_CTLCOLOR handler but that is actually how Dr. Joseph Newcomer did it in his old validating CEdit class.
That is really all I can think of for solving your problem. To be honest I generally avoid many of the MFC classes... I usually reinvent the wheel... because sometimes my wheels are more round. And if my new wheel ends up square... well at least I learned something in the process.
Best Wishes,
-David Delaune
|
|
|
|
|
I made a Windows Listview control that show the contents of a folder, so the user can select the file to open.
My Listview has 4 columns, the first is filename, which can be a folder or app. In front of the name, for cosmetics, I want to show the icon. So if it's a folder, the folder icon, and the name of the folder appears.
Question:
Am I even on the right track here, using SHGetFileInfo to get the folder icon from Shell32.dll, and how to load the result in an ImageList, so I can program the 1st column with the icon in the image list. I could actually use a little help here on writing the code.
hr = SHGetFileInfo( L"Shell32.dll", 0, &siFolderIcon_Small, sizeof( siFolderIcon_Small ), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
hr = SHGetFileInfo( L"Shell32.dll", 0, &siFolderIcon_Large, sizeof( siFolderIcon_Large ), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
HIMAGELIST hil_Folders;
HBITMAP hbm_Folders;
hil_Folders = ImageList_Create( 16, 16, ILC_COLOR, 2, 0 );
hbm_Folders = ( HBITMAP )LoadImage( ( HINSTANCE )lParam, siFolderIcon_Small.szDisplayName , IMAGE_BITMAP, 0, 0, 0 );
ImageList_Add( hil_Folders, hbm_Folders, NULL );
I'm not sure here, if the first code block should load the icon and text in one shot, or as the example shows, load the text, and then go back and load the icon in separate calls. Maybe load the icon in the first call, and then load the text in the second.
memset( &lv_ProjectOpen_Item_Record, dwIndex, sizeof( lv_ProjectOpen_Item_Record ) );
lv_ProjectOpen_Item_Record.iItem = dwIndex;
lv_ProjectOpen_Item_Record.iSubItem = 0;
lv_ProjectOpen_Item_Record.mask = LVIF_TEXT;
lv_ProjectOpen_Item_Record.cchTextMax = 254;
lv_ProjectOpen_Item_Record.pszText = szFileName;
ListView_InsertItem( lv_ProjectOpen_FileSelect, &lv_ProjectOpen_Item_Record );
lv_ProjectOpen_Item_Record.mask = LVIF_IMAGE;
lv_ProjectOpen_Item_Record.iImage = 0;
ListView_SetItem( lv_ProjectOpen_FileSelect, &lv_ProjectOpen_Item_Record);
lv_ProjectOpen_Item_Record.iItem = dwIndex;
lv_ProjectOpen_Item_Record.iSubItem = 1;
lv_ProjectOpen_Item_Record.mask = LVIF_TEXT;
lv_ProjectOpen_Item_Record.cchTextMax = 24;
lv_ProjectOpen_Item_Record.pszText = szDateModified;
ListView_SetItem( lv_ProjectOpen_FileSelect, (const LV_ITEM *)&lv_ProjectOpen_Item_Record);
|
|
|
|
|
I'm not so sure I haven't misinterpreted your question.
However, do you have a specific requirement to create your own dialog to allow for file selection? I ask, because the first thing I thought when I saw your post was 'what about the GetOpenFileName[^] common dialog?'
|
|
|
|
|
I didn't see it in the toolbox.
I just assumed you had to write everything from scratch, oh well.
I'll check the Microsoft Social Forum tonight
|
|
|
|