|
Hi,
it´s my recording session again : I need the accelerator character of a toolbar button.
Does anyone know how to retrieve the character if you only have the button id?
Regards,
Amar Bouchibane
|
|
|
|
|
If in a doc/view app, GetParentFrame()->m_hAccelTable is a HACEL handle to the current accelerator table. Use <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/CommCtls/winui/keybacel_5r39.asp">CopyAcceleratorTable</a> to dump this table into an array of ACCEL s structures and look for the accelerator you're after.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Thanks, Joaquín!
But when I try this...
CFrameWnd* pFrWnd = pToolbar->GetParentFrame();
HACCEL hAccl = pFrWnd->m_hAccelTable;
...
pFrWnd is null. What I´m doing wrong?
(pToolbar is a pointer to a CToolBarCtrl)
|
|
|
|
|
Ummm... Please try AfxGetMainWnd instead.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
AfxGetMainWnd() returns always NULL.
Does only the frame window holds the pointer to the active accelerator table?
Or is there any other place where I can find the HACCEL handle?
For you to remind... I have to program a windows recorder, that is I need information about all the accelerator hotkeys of the foreground window where my recorder´s embedded in.
Best regards,
Amar
|
|
|
|
|
I have a number of MFC applications that use form views to enter data into a database. These all use static lib MFC.
I have a number of forms that are needed in more than one application. What is the best way of sharing resources and their associated CFormView derived classes across projects.
In the past I've used MFC Extension DLLs but keeping the resource id's in different ranges became a pain.
Would one resource DLL for all the applications be a good idea (The apps are all part of one product)?
Suggestions?
Michael
|
|
|
|
|
There's an additional option that (IMHO) simplifies things further. Why not have resources and its additional CDlg -derived classes inside a regular MFC DLL and export a high-level C API along this line:
int PersonalDataDialog(PERSONA_DATA_STRUCT *pPersonalData); If you can follow this scheme, I'd say it is the most easily maintainable approach.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Michael P Butler wrote:
In the past I've used MFC Extension DLLs but keeping the resource id's in different ranges became a pain.
There's a tool created by Andy Metcalfe called Resource Organizer.
Michael P Butler wrote:
Would one resource DLL for all the applications be a good idea (The apps are all part of one product)?
This has the advantage when you plan to have multiple language versions of your product.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
I do that when work with diferent languages.
I put the resource into dlls, and share it from the dll....
Regards
Carlos Antollini.
Sonork ID 100.10529 cantollini
|
|
|
|
|
I'm sure this is a basic interface mistake, but if anyone could shed some light on it I'd be very grateful.
I've got an existing dialog with 5 radio buttons on it, I need to put on a sixth radio button, but when I do I can have the new one selected with one of the others selected (instead of only one as intended). Can anyone let me know how to get this new radio button to be part of the group that the others are in?
TIA
Dylan Kenneally
London,UK
|
|
|
|
|
You need to go into the .rc file and make sure this radio button is defined in the same group as the others, i.e. move it's defintion before any other controls that have also been added since the radio buttons where added.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
"I'm thinking of getting married for companionship and so I have someone to cook and clean." - Martin Marvinski, 6/3/2002
|
|
|
|
|
You don't have to edit .rc file manually - just use Ctrl+D to change the tab order.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Does that work ? Changing the tab order will move the radio buttons into a group ? Does changing the tab order change the rc file ?
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
"I'm thinking of getting married for companionship and so I have someone to cook and clean." - Martin Marvinski, 6/3/2002
|
|
|
|
|
Yes, it works. Radio buttons have to be in one group. First of them must have WS_GROUP bit set. One group ends where another begins, so first control *after* radio buttons must also have WS_GROUP set.
If you add new radio button and set its tab order, everything will work OK.
Christian Graus wrote:
Does changing the tab order change the rc file ?
Absolutely - 'tab order' is actually the order of control statements in .rc.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Hi there. How i can do this ? My app call another app by ShellExecute. I'm need inform user by msg window if external app end work
|
|
|
|
|
1) Use ShellExecuteEx to get the process handle
2) start the worker thread in your process. The thread will immediately call WaitForSingleObject passing the process handle received from ShellExecuteEx
3) when thread exits from WaitForSingleObject, the external app finished work. PostMessage to the main thread and exit from worker.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Hey it's a great idea to start WaitForSingleObject() in a different thread.
But how do I send a PostMessage() to the main thread and which parameters do I need to send?
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
#define WM_EXTERNAL_PROCESS_FINISHED (WM_USER + 1)
pMainWnd->PostMessage(WM_EXTERNAL_PROCESS_FINISHED);
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Thanks, you helped me once more
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Read this article. It gives a sample code snippet on what you want to do.
http://www.codeproject.com/useritems/newbiespawn.asp
Nish
My miniputt high is now 29
I do not think I can improve on that
My temperament won't hold
www.busterboy.org
|
|
|
|
|
Use ShellExecuteEx() instead.
SHELLEXECUTEINFO sei = {0};
sei.cbSize = sizeof(sei);
sei.lpVerb = "open";
sei.lpFile = "yourapp.exe";
sei.nShow = SW_SHOWNORMAL;
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
ShellExecuteEx(&sei);
WaitForSingleObject(sei.hProcess,INFINITE);
WaitForSingleObject will return when the other app has quit
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
I would like to know whether there is an ATL equivalent for the MFC CArray class. Assuming I do not want to use STL. Basically one reason for using ATL is to avoid bloated libraries (even if only slightly bloated) like MFC and STL.
Regards,
Buster
My miniputt high is now 29
I do not think I can improve on that
My temperament won't hold
www.busterboy.org
|
|
|
|
|
I don't believe your code will bloat significantly if you use only std::vector.
There's a CSimpleArray in ATL, but AFAIR it's designed to be an internal class.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
Thanks Tomasz. Lemme add here that I am not very comfortable with STL. I am not smart enough to use it.
That's why I need to depend on simpler solutions.
Nish
My miniputt high is now 29
I do not think I can improve on that
My temperament won't hold
www.busterboy.org
|
|
|
|
|
Nish [BusterBoy] wrote:
I am not smart enough to use it.
You don't need to be smart
To use std::vector you don't even need to know about iterators and other fancy stuff. Just do the following:
1) include <vector>
2) instantiate a variable:
std::vector<int> v;
3) set the size
v.resize(100);
4) load elements
for (int i = 0; i < v.size(); i ++) v[i] = i;
5) load even more
v.push_back(999);
v.push_back(888);
6) access the elements
int x = v[33];
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|