|
How can I get the coordinates of a window, relative to it's parent?
And how can I create sticky buttons on a toolbar? (Staying up/down when clicked)
Using MFC
|
|
|
|
|
Not sure about the coords part, but sticky buttons work exactly the same way as checkable menu items do
--
Help me! I'm turning into a grapefruit!
|
|
|
|
|
benjymous wrote:
Not sure about the coords part, but sticky buttons work exactly the same way as checkable menu items do
And that would be... how :p
|
|
|
|
|
Its relatively simple:
CRect GetCoordsRelativeToParent (CWnd *pCoordsOf)<br />
{<br />
CWnd *pParent = NULL;<br />
ASSERT(pCoordsOf);<br />
if (pCoordsOf != NULL)
pParent = pCoordsOf->GetParent ();<br />
<br />
CRect rcCoords;<br />
pCoordsOf->GetWindowRect (&rc);<br />
pParent->ScreenToClient (&rc);<br />
<br />
return rc;<br />
}<code><br />
<br />
I'm going of memory, so the syntax of the commands may be a little wrong, but you hopefully the idea!<br />
<br />
Iain.
|
|
|
|
|
Thanks a lot
|
|
|
|
|
Locked Ghost wrote:
And how can I create sticky buttons on a toolbar? (Staying up/down when clicked)
// where i is the button index (1,2,3,4,5,6 etc...)
m_wndToolBar.SetButtonStyle(i, TBSTYLE_CHECK);
Locked Ghost wrote:
How can I get the coordinates of a window, relative to it's parent?
CPoint point;
ClientToScreen(&point);
|
|
|
|
|
I forgot you need to handle the ON_UPDATE_COMMAND_UI ... and do a SetCheck either TRUE or FALSE to set the button down and up..
|
|
|
|
|
How can I catch an event in my application when user changes/changed language
(for instance, from En to Fr or De) in system tray area or with ALT+SHIFT?
Thanks
|
|
|
|
|
- INTRODUCTION:
I have created a derived CListCtrl class.
That class have a CEdit and a CComboBox var.
I try to instantiate them using their Create function but the this pointer is still null in the constructor of the ListCtrl.
- QUESTIONS:
When do the ListCtrl this pointer won't be null?
Which message must I handle in order to be able to use the Create functions? I mean that as in a dialog there's the OnInitDialog function, could it be possible to have something similar in a control?
- CODE:
the header file:
<br />
CEdit m_cedParametritzacio;<br />
the constructor in the cpp file:
<br />
CRect rInicialitzacio;<br />
<br />
rInicialitzacio.left = 0;<br />
rInicialitzacio.top = 0;<br />
rInicialitzacio.right = 20;<br />
rInicialitzacio.bottom = 20;<br />
<br />
int iR = this->m_cedParametritzacio.Create(ES_AUTOHSCROLL, rInicialitzacio, this, IDC_ED_PARAMETRITZACIO_LCTRL);<br />
Due to the fact that this is still NULL the function fails.
|
|
|
|
|
"this" pointer is not null at any place (from constructor to destructor).
ur problem is the (parent) window has not been created in constrctor.
WM_CREATE is right point to create child window - but, some MFC classes filter the message - check if the message is really past to ur code if has trouble.
includeh10
|
|
|
|
|
the wm_create is not passed...
|
|
|
|
|
Ok, here's the situation: I've created a new MDI app (with Appwizard) to which I've added four CFormView's. I've registered to Document Templates ok and can open new views without any problem.
The thing is these views are to operate sequentially (there is only one document) - i.e. the user will complete all the nessecary bits on one form, then click a button whoch will open a different form and close the current one.
The new view opens OK, but i'm having difficulty closing the first one without getting various nasty access violations etc. I gather from MSDN that DestroyWindow is the thing I should be calling, but that I should be calling this for both the view and frame - is this right? If so I cannot get it to work at all (shuts down ok but I then get all sorts of access violations which seem to be caused by some bit or other being left in memory).
Any body know how to do this? It strikes me as something pretty elementary but I just can't get a grip on it. Help!
All I want to do is close the view totally.
Alex.
|
|
|
|
|
I also need help on how to restart a program from within itself...
Basically I have a need to reload my program from scratch if a user changes some options. I'm not sure how to accomplish that, so any suggestions or hints would be really helpful!
Thanks in advance,
Dennis
MCP, MCSD
|
|
|
|
|
Can't you just make it ShellExecute it's own exe (passing down any command line options if appropriate) and then quit the original?
--
Help me! I'm turning into a grapefruit!
|
|
|
|
|
Strangely enough, it works!
I just didn't think of that option because I am limiting my application to one instance only in InitInstance and I thought that the thread wouldn't be destroyed as fast as it does and it would block the launch of a new one. But it doesn't. Thanks.
MCP, MCSD
|
|
|
|
|
Hmm, in that case it's worth testing rigourously (especially on slower machines) as it may end up failing some of the time.
Another solution would just to be to run a secondary application (or batch file) that's job is to just pause until the main app is quit, and then relaunch it
--
Help me! I'm turning into a grapefruit!
|
|
|
|
|
Hello,
Please help to understand the ways of the Rich Edit OLE...
I'm able to insert and item into my Rich Edit Control (I'm using a dialog-based app) by creatig IRichEditOle and the rest and then using ->InsertItem()... (its from MSDN)
Now, it does seem to insert it (by looking at the rtf string before saving), but after I actually save, the file size gets bigger and bigger, but I don't see anything I've inserted (instead there's just a single space for each item I've inserted).
My guess is that objects do get saved, but I just don't know how to read them back and the Rich Edit Control (v2) doesn't do that automatically. I've tried using GetObjectCount() and then GetObject(), but the first function returns a 0.
Can anyone direct me to any samples or articles please?
Thank you in advance,
Dennis
MCP, MCSD
|
|
|
|
|
Hi
I have to get know whether some process is running. I want to identify the process by the name which is shown in Task Manager. The problem is I don't know how to find out whether the process is running using the name from Task Manager. Thanks for any hints.
Mariusz Popiolek
|
|
|
|
|
Search MSDN for Q175030. You'll find code there for this.
lazy isn't my middle name.. its my first.. people just keep calling me Mel cause that's what they put on my drivers license. - Mel Feik
|
|
|
|
|
A bit complicated but should work, thanks!
Mariusz Popiolek
|
|
|
|
|
I read a CP post a long time ago about a neat little trick in VS.NET. You could make it autogenerate GUIDs everytime you started to type "uuid(" and the like.
Please help me remember!
--
standing so tall, the ground behind
no trespassers, on every floor
a garden swing, and another door
she makes it clear, that everything is hers
A place of abode, not far from here, Ms. Van de Veer
|
|
|
|
|
It must be inside an attribute declaration, like this: [uuid(" and VS.NET will fill it for you
lazy isn't my middle name.. its my first.. people just keep calling me Mel cause that's what they put on my drivers license. - Mel Feik
|
|
|
|
|
Argh. Why did they not put this feature in IDL-files?
I think I'll do some VB.NET-scripting within the near future!
--
standing so tall, the ground behind
no trespassers, on every floor
a garden swing, and another door
she makes it clear, that everything is hers
A place of abode, not far from here, Ms. Van de Veer
|
|
|
|
|
How can I make that the user can not change the width of a column of a list view control (CListCtrl )?
I have a list view control with a non sortable header (with the LVS_NOSORTHEADER flag) and want to make that the user can not change the width of the only column I have.
How?
Daniel
---------------------------
Never change a running system!
|
|
|
|
|
Create another listCtrl that handles that message and that's all.
1. Create new class.
2. Select MFC class.
3. choose the CListCtrl as the base class.
4. implement the pretranslatemessage function in that new class in order to filter/handle the allowed messages. (use the spy++ in order to get the messages you want to eliminate.)
5. include your header file in the dialog/view you want to use it.
6. (if you are using a dialog), insert a normal listctrl in the dialog editor.
7. assign a variable to that listctrl and in the type of the variable choose your new class.
that's all.
(I suppose you'd know al those steps, and probably they are not the best ones to reach your purpose, but doing this you'll have all the data needed in order to be able to do it...)
Hope this helps.
|
|
|
|