|
Sadly, dynamic_cast (and it's MFC cousin) won't work on CWnd::GetDlgItem() since it actually returns a CWnd (which is very likely to be a temporary object). Hence the dyanmic cast will fail.
The best way would actually be to subclass your edit controls using DDX_Control()...that way you can manipulate them directly without using GetDlgItem().
Anna
"Be yourself - not what others think you should be" - Marcia Graesch
|
|
|
|
|
I'm trying to access a parallel port in my project...
I've got a DLL that should solve my troubles, but the problem is: How do I use a DLL in Visual C++?
|
|
|
|
|
There are mainly two options you have:
1. If you have the dll, a .h file describing the functions available in the dll and a .lib file you should be able to #include the .h file and add the lib file to your linker settings. Then you can call the functions in the dll just like any other function.
2. If you however have only got the dll itself and know the layout of the functions then you would have to use ::LoadLibrary / ::GetProcAddress to load the address of the function you want to call at runtime. Assuming the function you want to use takes two parameters; one integer and one LPCTSTR; and returns BOOL then you could use a code similar to this:
<br />
typedef BOOL ( CALLBACK* MyExportedFunction )( int, LPCTSTR );<br />
<br />
HINSTANCE hInst = ::LoadLibrary( _T( "theDLLIWantToUse.dll" ) );<br />
<br />
if ( hInst != NULL )<br />
{<br />
MyExportedFunction myFunc = (MyExportedFunction) GetProcAddress( (HMODULE)hInst, _T("TheFunctionIWantToCall") );<br />
if ( myFunc != NULL )<br />
{<br />
BOOL bRetVal = myFunc( 7, _T("This is a string parameter") );<br />
}<br />
::FreeLibrary( (HMODULE)hInst );<br />
}<br />
<br />
Wenn ist das Nunstück git und Slotermeyer? Ja! Beierhund das oder die Flipperwaldt gersput!
|
|
|
|
|
Hi.
I added a simple CListCtrl box with a List style to a dialog box. However, I cannot insert more than one item. Another possible problem is that Windows is not drawing the other items. Nonetheless, only one item shows up. Here is an example what how I inserted items.
-----
OnInitDialog(...)
{
LVITEM Item;
Item.mask = LVIF_TEXT;
Item.state = LVIS_SELECTED;
Item.stateMask = LVIS_SELECTED;
Item.cchTextMax = 0;
Item.iImage = 0;
Item.lParam = 0;
Item.iSubItem = 0;
Item.pszText = TEXT("November");
// I would like to insert ten items in the list box.
for (unsigned i = 0; i < 10; ++i)
theListBox.InsertItem(&Item);
-----
After the insertion above, only one line of "Novermber" will show up in the CListCtrl box.
I have worked with CListCtrl boxes using Report Style. I have not had this problem. I would like to know why does it ignore all new items except the first line?
Thanks,
Kuphryn
|
|
|
|
|
Okay - I'll be the first to admit I don't know what I'm doing. But it looks like you're trying to insert the same item (ie, same memory address pointing to the item) multiple times.
I would try creating a second LVITEM called Item2, insert that, and see if you get multiple values in the CListCtrl. In the .InsertItem() function it may actually check and see if an item is already there, and if so, don't add it again.
- Kati
|
|
|
|
|
From MSDN
iItem
Zero-based index of the item to which this structure refers.
so... change your code to:
for (unsigned int i = 0; i < 10; ++i)
{
Item.iImage = i;
theListBox.InsertItem(&Item);
}
This sets the index of the item to something other than 0.
That's why I ramble so much. If you're short and quotable, there's a much greater danger of ending up in a sig.
[Christopher Duncan on how to prevent yourself from ending up in a sig]
|
|
|
|
|
Okay. Thanks everyone.
I decided to go back to the same solution I have been using on othe projects: Report style. It works perfect.
Kuphryn
|
|
|
|
|
You should fill in the item index.
Item.iItem=i;
|
|
|
|
|
Hello!
To detected LButton hold (for many minutes if you want) when mouse is moving we write:
void XXX::OnMouseMove(UINT flags, CPoint p)
{
if ( flags & MK_LBUTTON ) {
....
}
}
How can I detect LButton hold ( for many minutes ) when mouse is not moving ?
Thanks,
Sovann.
Why waste time learning while ignorence is instantaneous ? [Hobbes]
|
|
|
|
|
WM_LBUTTONDOWN and WM_LBUTTONUP.
Christian
No offense, but I don't really want to encourage the creation of another VB developer. - Larry Antram 22 Oct 2002
Hey, at least Logo had, at it's inception, a mechanical turtle. VB has always lacked even that... - Shog9 04-09-2002
Again, you can screw up a C/C++ program just as easily as a VB program. OK, maybe not as easily, but it's certainly doable. - Jamie Nordmeyer - 15-Nov-2002
|
|
|
|
|
You could also try ::GetAsyncKeyState( VK_LBUTTON );
Wenn ist das Nunstück git und Slotermeyer? Ja! Beierhund das oder die Flipperwaldt gersput!
|
|
|
|
|
VC++ 6
For a custom control, I have to show / hide the focus rect in SetFocus / KillFocus, and in accordance to the "Windows painting rules" (i.e. message handlers invalidate regions, and all drawing is done in WM_PAINT) I've come up with the following solution:
a) WM_SET/KILLFOCUS creates a region that is just the focus rectangle, and invalidates it
b) WM_PAINT draws the focus rect(if necessary), then stops anything else when the remaining area is not part of the update region
Now, this sounds like a little bit of overkill here. any GDI gurus coming up with something better?
skulls don't kiss for an explanation - wait for the vacation photos! [sighist]
|
|
|
|
|
It may be simpler to set some member variable "bFocusChanged" inside the WM_SET/KILL FOCUS messages, then do an Invalidate on the control. In the WM_PAINT handler, check if the flag is set, and if so, only redraw the focus state. After this, set the bFocusChanged to FALSE. I'm not sure if this is the best way, but it will be less expensive than region testing.
Chris Richardson
Programmers find all sorts of ingenious ways to screw ourselves over. - Tim Smith
|
|
|
|
|
I thought of that too - but this would drop any other invalidates that are either pending, or happen between the message handler and the actual WM_PAINT.
skulls don't kiss for an explanation - wait for the vacation photos! [sighist]
|
|
|
|
|
This is overkill. Just draw the control and paint a focus rect afterwards if the control has the focus. For Set/Kill focus, invalidate the whole control (without forcing a background redraw).
|
|
|
|
|
I am writing my own shell. Where can I get info on how to create taskbar and systray and make them work ?
I am seaching for information fro two months!
Help!
|
|
|
|
|
The taskbar is an example of an "App Bar". Take a look at SHAppBarMessage in the MSDN. It provides all you need to create your own.
Chris Richardson
Programmers find all sorts of ingenious ways to screw ourselves over. - Tim Smith
|
|
|
|
|
I need a view get the size of a formview, not the form size to the view.
I know the second option is using RecalcLayout and ResizeParentToFit, and the first option how?
Thanks.
|
|
|
|
|
Hi
I was wondering about the desktop and settings for it. I haven't really played about with things like this before, so maybe some of you who have could point me in the right direction?
I was thinking that it would be kind of cool to have a script that runs on startup to change the desktop background randomly, based on pictures in a particular folder. Is this silly / impossible, or is it a simple concept that I should have learned at the same time as learning to semi-colon and somehow missed out on?
Thanks for any ideas / pointers in the right direction.
ps. I would like to write the script myself, rather than download an exe utility. Thanks!
I knew it would end badly when I first met Chris in a Canberra alleyway and he said 'try some - it won't hurt you'.....
- Christian Graus on Code Project outages
|
|
|
|
|
This is reasonably easy to do using SystemParametersInfo() . Specifically, see SPI_SETDESKPATTERN and SPI_SETDESKWALLPAPER .
/ravi
Let's put "civil" back in "civilization"
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
Thanks - looking forward to getting it working
I knew it would end badly when I first met Chris in a Canberra alleyway and he said 'try some - it won't hurt you'.....
- Christian Graus on Code Project outages
|
|
|
|
|
|
Thanks!
I knew it would end badly when I first met Chris in a Canberra alleyway and he said 'try some - it won't hurt you'.....
- Christian Graus on Code Project outages
|
|
|
|
|
Is it possible to create a hook for a MS DOS program? I wish to hook NT's net.send function that you can use under CMD (I assume it stands for command).
For those who are wondering, I wish to block out which computer sends the message. My school frowns on sending messages, and I wish for a little more impunity!
Thanks,
~ Selevercin
If you have a problem with my spelling, just remember that's not my fault. I [as well as everyone
else who learned to spell after 1976] blame it on
Robert A. Kolpek for U.S. Patent 4,136,395.
|
|
|
|
|
There is a way to hook API calls for all processes in the system. You must first write a DLL and get it loaded (possible using a global message hook) in all processes. Then, it's possible to hook functions using APIHijack, which can be found I think here on CodeProject. The function you will want to hook is called NetMessageBufferSend, located in NetApi32.dll, which is what the "net send" command uses I'm sure.
Chris Richardson
Programmers find all sorts of ingenious ways to screw ourselves over. - Tim Smith
|
|
|
|