|
how to create 3D coloured command button
|
|
|
|
|
Can you be more specific you want to create 3D bulk button
|
|
|
|
|
Hello Comunity,
i have an litle trouble wit this data type! To add an new item in this object i use:
CMapStringToOb cMap;
CString csNewKey = "First";
CMyObject* myObject;
cMap.SetAt(csNewKey, new CMyObject());
cMap.Lookup(csNewKey, (CObject*&)myObject);
myObject->csName = "John";
ok, works fine, but when i close my dialog, i recive memoryleaks!
And the debugger show in this line with -> cMap.SetAt(csNewKey, new CObject()); ?!
how to solve this, any sugestions?
regards
break;
|
|
|
|
|
break; wrote: cMap.SetAt(csNewKey, new CMyObject());// to add new items to my class CMyObject use:cMap.Lookup(csNewKey, (CObject*&)myObject);
You have used new CMyObject ,in SetAt .
Somewhere you need to delete it. You can do it before cMap goes out of scope, enumerating it.
|
|
|
|
|
Hello,
i use other funktion to delete all objects befor closing dialog, looks something like this:
POSITION pos = cMap.GetStartPosition();
CString csKey;
CMyObject* cMyObject;
while(NULL != pos)
{
CMyObject* myOb;
cMap.GetNextAssoc(pos, csKey, (CObject*&)cMyObject);
delete cMyObject;
cMap.RemoveKey(csKey);
}
i dont know what else to do!
Question is on witch place to set use "delete"? I need all data during program run, only solution is
before closing the dialog??
regards
break;
|
|
|
|
|
I dont see any memory leak, if you are using above code.
break; wrote: Question is on witch place to set use "delete"? I need all data during program run, only solution is
before closing the dialog??
Are you asking this ?
you can write it in DestroyWindow() . Provided cMap is dialog class member.
|
|
|
|
|
You're creating new objects when you add them to the map, but you're never deleting them
Either:
1) At the end, go though the elements of cMap, and delete everything
2) Use smart pointers, that'll delete the objects for you
|
|
|
|
|
Hi,
thanx for answer, please take a look to my answer by previous reply!
regards
break;
|
|
|
|
|
Hi,
smart pointer can be a good idea, how to use them in this case, any sample for smart pointer?
break;
|
|
|
|
|
|
Hello,
yes, i try this to solve my prob.!
thanx for help to all
regards
break
|
|
|
|
|
Hi everyone,
i had a component with diff PopUp Buttons, to catch the OnClick-Event i added a message-handler in the
Pane ( it herids from CWnd ) and a click on the different PopUp Buttons executes the code in the method On_xxxxxx_Click() in this Pane.
Now, i have created a modified the component and added a Click-Handle that determinates the Button of the component who's clicked.
Then i must send a message to the Pane to execute the On_xxxxxx_Click() ( The Pane doesn't change )
void MyTaskPanel::OnLButtonDown(UINT nFlags,CPoint point)<br />
{<br />
<br />
TaskPanelGroup* Item;<br />
<br />
Item = HitTestGroup(point);<br />
<br />
UINT SelectedID;<br />
if(Item) {<br />
SelectedID = Item->GetID();
SendMessage(BN_CLICKED,(WPARAM)SelectedID,NULL);
} else {<br />
}<br />
}
In the pane i have this message-map :
BEGIN_MESSAGE_MAP(Home_Bht_Kunden_Side, CPaneView)<br />
ON_BN_CLICKED(ID_OF_CLICKED_BUTTON,On_ID_OF_CLICKED_BUTTON_Click)<br />
...<br />
END_MESSAGE_MAP()<br />
<br />
void ThePane::On_ID_OF_CLICKED_BUTTON_Click()<br />
{<br />
int test = 9;
}<br />
<br />
The Question: If i send a message from out the component, where does the message arrives?
Can all Message-Maps receive this Message and trade it ( if it matches )
Big Thanks
|
|
|
|
|
BN_CLICKED is not a message, it is notification code and should be sent through WM_COMMAND message.
e.g.
WPARAM wParam = (WPARAM)(((WORD)BN_CLICKED << 16) | ((WORD)GetDlgCtrlID()));
GetParent()->SendMessage(WM_COMMAND, wParam, (LPARAM)m_hWnd);
where m_hWnd is the HWND of the control and GetDlgCtrlID() returns the id of the control.
The message arrives to that CWnd you sent it. In your situation, you send the message to MyTaskPanel, so MyTaskPanel should process the message. If you want to send a message to other CWnd object , you should call SendMmessage fct. for that object : pMyView->SendMessage(...)
|
|
|
|
|
Thanks for the answer
but i don't have a HWND. I will sent the Message from out the Component.
The component should send a message to the window where it's placed.
Because the components gets the universal click on the component
The OnClick-Function determinates which button is clicked and the component sends a new message
to the window by specifing which Button is clicked ( over the ID )
Thanks
|
|
|
|
|
You will also find that your code may work in Debug build, but when you build a release version, it will crash.
The reason is that the SendMessage actually sends the command and a WPARAM and LPARAM. You must handle those in your message handler:
void ThePane::On_ID_OF_CLICKED_BUTTON_Click(WPARAM, LPARAM)<br />
{<br />
int test = 9;
}Karl - WK5M<br />
PP-ASEL-IA (N43CS)<br />
<kmedcalf@ev1.net><br />
PGP Key: 0xDB02E193<br />
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
I found the error
I send the Message from the Pane, but that's wrong
I must send the Message from the Parent of the Pane.
GetParent()->SendMessage(WM_COMMAND, wParam, (LPARAM)NULL);
Thanks nevertheless
|
|
|
|
|
Hi all,
i am doing project in MFC. up to this moment i used visual studio 6.0
IDE for my developement purpose. but because of some reasons i shifted
Visual studio 2003 Version 7.1.3088.
i migrated all my project to this version and now when i create a final
release.
and run it on other machine that does not have .NET or .NET framework
installed on it
gives an error by saying mfc71.dll not found.
so is it necessary to install .NET framework on the client's computer
to run my application??
Thanks and regads
Harshal
|
|
|
|
|
Try this:
In project settings search for "Use MFC in a Static Library" in Project>Properties>General > Use of MFC and select and apply it.
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|
|
harsha_1234 wrote: and run it on other machine that does not have .NET or .NET framework
installed on it
gives an error by saying mfc71.dll not found.
If you write a program using .NET, it will require the pertaining framework to be installed in the target machine where you run the program. Linking the files statically may result in an increased size of the application.
harsha_1234 wrote: so is it necessary to install .NET framework on the client's computer to run my application??
Yes!
Nobody can give you wiser advice than yourself. - Cicero
|
|
|
|
|
brahmma wrote: harsha_1234 wrote:
so is it necessary to install .NET framework on the client's computer to run my application??
Yes!
NO !!!!
he's programming MFC !
so only the MFC71.dll, MSVCR71.dll and MSCVP71.dll may be necessary
|
|
|
|
|
toxcct wrote: he's programming MFC
Sorry, I missed that. Sincerely.
Nobody can give you wiser advice than yourself. - Cicero
|
|
|
|
|
don't confuse, installing Visual Studio .NET doesn't mean you actually use the .NET framework.
if your program is pure MFC project, then provide the MFC71.dll, MSVCR71.dll and MSCVP71.dll libraries with your exe (or statically link your project to MFC, but that'll increase the .exe file size significantly)...
|
|
|
|
|
Thanks for replying.
as you said i think it does not use the framework it's running in pure MFC.
so by putting these dll's on client's machine will be suffice..
Thanks
Harshal
|
|
|
|
|
complete answer
|
|
|
|
|
Ship all required dll's on client m/c. No need to install .net framework.
Use depends.exe for detecting dependencies.(It will show files mentioned by you).
|
|
|
|