|
i use the fucntion:
"WINOLEAPI OleCreateLinkToFile(...)" to create some file links(show the file icons just like in CListCtrl)in my CRichEditCtrl Control,The result is successful,But it takes me about 20 second(Celeron 1G + 256M SDRAM).I want to known some more quick method to do.Any help is appreciated.thanks!
C/C++ code fans
|
|
|
|
|
I'm using STL vector containing some pointers. The only changes i make to it is to add values using push_back . I also keep an iterator which starts from the beginning and only grows by ++, being checked not to pass the end .
The problem, while debugging: sometimes when i try to access the iterator , the application is blocking on that line.
Could the iterator become invalid because of the vector growing?
rechi
|
|
|
|
|
Bogdan Rechi wrote:
Could the iterator become invalid because of the vector growing?
I sure wouldn't think so, are you using something like this:
vector<int*> vect;
vector<int*>::iterator iter;
int a, b, c, d = 1;
vect.push_back(&a);
vect.push_back(&b);
vect.push_back(&c);
vect.push_back(&d);
for(iter = vect.begin();iter != vect.end(); iter++)
cout << *iter << endl;
Nick Parker
May your glass be ever full.
May the roof over your head be always strong.
And may you be in heaven half an hour before the devil knows you’re dead. - Irish Blessing
|
|
|
|
|
Nick Parker wrote:
are you using something like this
Yes, something equivalent.
The difference: int * is a MyStruct * and cout << *iter; is an (*iter)->m_member access.
What's wrong?
rechi
|
|
|
|
|
Bogdan Rechi wrote:
What's wrong?
This works for me:
struct MyStruct
{
int data;
};
void main()
{
vector<MyStruct*> vect;
vector<MyStruct*>::iterator iter;
MyStruct a, b, c, d;
a.data = 1;
b.data = 2;
c.data = 3;
d.data = 4;
vect.push_back(&a);
vect.push_back(&b);
vect.push_back(&c);
vect.push_back(&d);
for(iter = vect.begin();iter != vect.end(); iter++)
cout << (*iter)->data << endl;
}
Nick Parker
May your glass be ever full.
May the roof over your head be always strong.
And may you be in heaven half an hour before the devil knows you’re dead. - Irish Blessing
|
|
|
|
|
Solved!
Sorry, it was not quite equivalent. It's more like this:
vector<int*> vect;
vector<int*>::iterator iter;
int a, b, c, d = 1;
vect.push_back(&a);
iter = vect.begin();
vect.push_back(&b);
vect.push_back(&c);
vect.push_back(&d);
for(;iter != vect.end(); iter++)
cout << *iter << endl; The iterator becomes invalid because of the vector growing.
Thank you!
rechi
|
|
|
|
|
Bogdan Rechi wrote:
I also keep an iterator which starts from the beginning and only grows by ++, being checked not to pass the end.
What do you mean by that ? I think the iterator is simply not valid.
Max.
|
|
|
|
|
Take a look at the thread above. Indeed, the iterator was not valid.
rechi
|
|
|
|
|
How to get the HINSTANCE of a dll?
Is there a way to get the HINSTANCE from a dll,
without saving the HINSTANCE from the DllMain or
calling GetModuleHandle("DLLName")?
I want to use the HINSTANCE in a COM-Object, thus
its not elegant to hand over it from the DllMain.
Otherwise the dll should exists with different names,
witch make it inconvenient to use a filename in the code.
Thanks
Juergen
|
|
|
|
|
I have a trouble with a CButton derived class.
The code is like the following:
class CMyButton : public CButton
{
....
}
CMyButton::SetColor(...)
{
...
Invalidate();
...
}
CMyButton::OnPaint()
{
...
CPaintDC dc(this);
...
}
------------------------------------
First, I created a CDialog derived class with a "Group Box" control inside and a DDX variable associated called MyGroup. I changed the type of MyGroup variable in CMyButton. Calling the SetColor() method of MyGroup, the Invalidate() causes the OnPaint() execution and the control is successfully drawn.
Then I changed the CDialog derived class with a CDialogBar derived class.
I have the following problems:
1) The Invalidate() method doesn't causes the execution of the OnPaint();
2) If I change the Invalidate() statement with the direct call of OnPaint(), the execution of the statement "CPaintDC dc(this)" fires the following assertion of "void CWnd::AssertValid()"
ASSERT((CWnd*)p == this);
Can you help me?
Thank you.
|
|
|
|
|
Is here any API to work with WinPopup massages.
Thank you
viliam
|
|
|
|
|
check out mailslot API
I am seeking...
For what?
Why did you ask me for what? I don't know!
|
|
|
|
|
If anyone codes managment of OOB data on a windows socket (winsock2), I would be really grateful if he/she could help.
I try to catch an OOB signal, and then remove data which are before the OOB mark, in a socket configured as SO_OOBINLINE.
TIA,
K.
Ohé Partisans, Ouvriers et Paysans
C'est l'alarme!
Le Chant des Partisans
|
|
|
|
|
Using common controls like e.g. the date-time picker enhances the look-and-feel of your application, but also seems to introduce an annoying language-problem.
Even if our application is running in e.g. German or Italian, the strings in the common control (and common dialogs) remain in English.
From the MSDN documentation I found that there is a function InitMUILanguage than you can use to change the language of common controls. I used it as follows:
{
HMODULE CommonControlDll = LoadLibrary("comctl32.dll");
if (CommonControlDll)
{
void (*InitMUILanguageFunction)(LANGID uiLang) = (void (*)(LANGID))GetProcAddress(CommonControlDll, "InitMUILanguage");
if (InitMUILanguageFunction) InitMUILanguageFunction (LANG_ITALIAN);
}
}
But apparently, it does not seem to work.
Notice that I had to dynamically load comctl32.dll and find the function in the DLL. Calling it directly in my application results in an unresolved external, hence this trick.
Does anybody use this function to set the language of common controls?
Does this only work on certain 'flavours' of Windows 2000 (won't probably work on NT4) ?
So far I found out that the language of the common controls only reacts on the language selected in the control panel (the locale), but not consistently. E.g. setting the language to Italian only translates the names of the months in Outlook, not the button 'Today'.
For the common dialogs (e.g. printer configuration) the situation seems to be even much worse. Setting the language to Italian only translates 'Properties' to 'Proprieta' and 'Cancel' to 'Annula', but all the rest is still in English.
What is the correct way to handle this ?
Enjoy life, this is not a rehearsal !!!
|
|
|
|
|
Patje wrote:
Even if our application is running in e.g. German or Italian, the strings in the common control (and common dialogs) remain in English.
Commctrls are part of the OS, and thus are localized with the same language than your OS language.
You have more freedom when it comes with MFC controls, where you have a MFC42xxxloc.dll DLL to choose for redistribution (see MSDEV CD for more).
Patje wrote:
From the MSDN documentation I found that there is a function InitMUILanguage than you can use to change the language of common controls. I used it as follows...But apparently, it does not seem to work.
So you think each OS installation features all controls in all possible languages. Of course not.
MUI is a totally different thing. It's introduced with XP only, and it's a set of system dlls aimed to "enhance" dynamic language switch by hooking ::LoadLibrary. It works with the installation of localized MUI dlls (which you have to install on top of your OS anyway, on a language-by-language basis).
|
|
|
|
|
.S.Rod. wrote:
MUI is a totally different thing. It's introduced with XP only
Strange, according to the MSDN documentation:
The common controls have built-in support for national languages. These features simplify the implementation of localized applications.
And it works as long as I change the 'locale' in the control Panel. I have a standard Windows 2000. Setting the language to German gives me german month names and a 'Heute' button (instead of Today). And I'm sure I'm using normal common controls, no MFC controls.
.S.Rod. wrote:
Commctrls are part of the OS, and thus are localized with the same language than your OS language.
According to the documentation of InitMUILanguage:
Enables an application to specify a language to be used with the common controls that is different than the system language. and
Windows NT/2000: Requires Windows 2000 (or Windows NT 4 with Internet Explorer 5 or later installed).
Not a word about XP required.
What am I missing ?
<marquee>Enjoy life, this is not a rehearsal !!!
|
|
|
|
|
are there any known issues with dispatching VARIANTs from one app to another in VS.NET?
when dispatching BSTRs and the like, everything goes fine. i tried some older applications (compiled under VS6) on my computer and they do work properly (using VARIANT as a paramter through automation).
i built the very easiest example of one server-app exporting one function VARIANT Test(VARIANT var); and one client using this function through automation. when debugging the client, the server gets properly loaded and the mfc-dispatchwrappers all do their job well (at the and of F11-ing the client the VARIANT-argument is ok as i constructed it). but when i debug the server, the VARIANT-argument getting in there is crap. moreover: it is different for each debugging-session.
as the proper functions get called, i assume, there's everything ok with registring the component and that stuff.
is there anything known about this issue? any hints and ideas are greatly appreciated...
thx.
:wq
|
|
|
|
|
it even doesn't work, when i compile the server as a dll.
in that case, everything is running in the same process and i can debug each and every step. just before the server-function is called, there are some fancy stack-creation and inline-assembler thingies in the code.
when the function is called then, there's crap on the stack!
ah. just found one more: even the return address seems to be corrupt. when i return from the server-function into the mfc-wrapper-code i end up higher than i started!
the result is: the server-function is entered again and afterwards that inline-assembler-code wants to derefence a NULL-pointer. bang!
maybe there's an error in the VC++.NET implementation of that code?
or maybe i have some wrong settings in my project?
weird!
:wq
|
|
|
|
|
ok. i cross-checked that thing with VS6 and the following turns out:
the VS6-client crashes when using the VS.NET server
the VS.NET-client crashes when using the VS.NET server
the VS6-client works correctly with the VS6 server
the VS.NET-client works correctly with the VS6 server
so i believe there is a bug in the VS.NET automation-server MFC-implementation when using a VARIANT-parameter. and now? how can i report this.
or maybe i made a mistake somewhere, but i don't know where...
:wq
|
|
|
|
|
I draw a transparent ownerdraw button.
So I did override OnEraseBkgnd() and draw my stuff in DrawItem(), with strange result. If I use device context from LPDRAWITEMSTRUCT the result is strange... if I use my own DC then all looks fine.
Can someone explain this behaviour to me? Am I doing something terribly wrong or bad? Thanks for help!
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
CClientDC dc(this);
CRect rect = lpDIS->rcItem;
DrawMyGrafic(&rect, &dc);
}
BOOL CMyButton::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
|
|
|
|
|
I am using Web browser control in my program. The control ID is IDC_EXPLORER1. So now i want to hide this control at start up and display it on button click. So to hide , i am using GetDlgItem(IDC_EXPLORER1)->ShowWindow(SW_HIDE); and to show it in button click i am writing GetDlgItem(IDC_EXPLORER1)->ShowWindow(SW_SHOW); When i am using this, i am getting run time errors and the debugger is pointing to ShowWindow function of CWnd. So can anyone tell me how to hide n show this control. I also tried using a member variable for this control n using the function SetVisible of CWebBrowser wrapper class. So Just i wanna know how to show n hide the Web control.
Never postpone today's work for tomorrow
|
|
|
|
|
give a variable to this control, and VS will create a wrap class for it,then use this variable to ShowWindow
I am seeking...
For what?
Why did you ask me for what? I don't know!
|
|
|
|
|
I have done all that. I assigned a variable with name m_browser. Now in my application am using it. Like m_browser.ShowWindow(SW_SHOW) and m_browser.ShowWindow(SW_HIDE). But it is not working and i have tried for other Microsoft registered active X controls also. It's giving run time error and the debugger is taking me to ShowWindow function.
Never postpone today's work for tomorrow
|
|
|
|
|
You can use any of those techniques (the control variable is probably best) but you need to make sure the control has been created before you try to send it messages or use its window handle in any other way. You will get run-time errors or asserts if you use any of the wrapper classes on a control with an invalid window handle (such as before the window is created or after it is destroyed).
The opinions expressed in this communication do not necessarily represent those of the author (especially if you find them impolite, discourteous or inflammatory).
|
|
|
|
|
If I have these coordinates
(51,74),(98,59),(74,36)
I want to display window. In this window have a rectangle which size is 256x256 and have a black frame. I want to show red point at (51,74),(98,59),(74,36) and if I want to draw black line from (98,59) to (74,36). Do you know how to do that?
Thank you for your reply.
|
|
|
|