|
If FindwindowEx was not provided by MS, i would go for your suggestion.
|
|
|
|
|
Hello! I'm working on a library that's going to deal with windows (to be more specific, I'm wrapping some windows APIs that deals with window creation/destruction and messages (like a window click etc.) into OOP).
In the message handler this is what i have:
LRESULT CALLBACK zooppMessageHandler::msgHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
zooppMessageHandler *obj = (zooppMessageHandler*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
int retVal = false;
if(obj == NULL)
if(msg == WM_CREATE || msg == WM_INITDIALOG)
{
SetWindowLongPtr(hwnd, GWLP_USERDATA, LONG_PTR(((CREATESTRUCT*)lParam)->lpCreateParams));
obj = (zooppMessageHandler*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
retVal = obj->OnInit();
if(retVal != false)
return retVal;
else
return DefWindowProc(hwnd, msg, wParam, lParam);
}
else if(msg == WM_PARENTNOTIFY && wParam == WM_CREATE)
{
}
retVal = obj->Handle(msg, wParam, lParam);
if(retVal != false)
return retVal;
else
return DefWindowProc(hwnd, msg, wParam, lParam);
}
I know that so far it may look a bit unprofessional/unoptimized but i don't care about that yet. As you may see, for normal windows I pass the 'this' pointer into CreateWindowEx() function, and attach it's address to the window's handle with SetWindowLongPtr(). When a message (other tham WM_CREATE, WM_INITDIALOG etc.) comes I just grab the address of 'this' by calling GetWindowLongPtr() and then handle the message.
But...I ran into a problem regarding child windows. As far as I'm aware, when a child window is created the system won't send a WM_CREATE message but instead it will send a WM_PARENTNOTIFY message, wParam contains the child window's message (in my case WM_CREATE) and lParam it's handle. This means I can't pass the address of the object which issued the CreateWindowEx() function into the message handler.
Am I wrong? If no...how can i pass the object's address when creating child windows? For normal windows (as you see in the above code), I get the object's code from lParam which contains a pointer to a CREATESTRUCT structures in which member lpCreateParams points to the address of the object which issued a CreateWindowEx() function call.
|
|
|
|
|
You could try to implement an extended CreateWindowEx(..) for all windows :
HWND CreateWindowAndRegisterHandler(..)
{
HWND hwndResult = CreateWindowEx(..);
if (hwndResult) {
if (lpParam &&
RegisterHandler(..)) {
CYourBaseHandler* pcBaseHandler = (CYourBaseHandler*) lpParam;
pcBaseHandler->OnInit();
}
}
return hwndResult;
} ...and then use/decrease the map in your callback...
virtual void BeHappy() = 0;
|
|
|
|
|
Hmm..indeed! I know what I have to do. Thanks for the tip!
I'll get to work immediately !
|
|
|
|
|
Is there an API to know the current idle-status percentage of the cpu usage (like what is showed in the taskmanager)?
Russell
|
|
|
|
|
|
Hi,
Dll best practices document from Microsoft available Here recommends avoiding use of memory management function from the dynamic C Run-Time (CRT) within DllMain. But DllMain function of MFC Extension DLL is dynamically allocating the memory for CDynLinkLibrary in the code snippet available at MSDN.
Is it a violation of Dll Best Practices or ok to use in MFC extension DLL?
thanks
|
|
|
|
|
The MFC Dlls are created to be used by MFC clients,
which could not exist without initialized CRT...
virtual void BeHappy() = 0;
|
|
|
|
|
Hi All
How can i generate series like this?
a b
c d
e f
g h
i j
k l
m n
o p
q r
s t
u v
w x
y z
aa ab
ac ad
ae af
. .
. .
. .
. .
Can any one tell which algo or any more specific function for this problem?Please help me
|
|
|
|
|
A simple for loop should be sufficient.
It's time for a new signature.
|
|
|
|
|
Thanks for nice reply.
I know for is solution but i need generate series.I use for loop but i havn't found ot solution.Here is code
#include <iostream>
#include <string>
using namespace std;
char chars[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
string t;
void checkPassword(string password);
void recurse(int width, int position, string baseString);
int main() {
cout << "Enter a string: " << endl;
cin >> t;
int maxChars = 13;
for(int i=0;i<maxChars+1;i++) {
cout << "checking passwords width [" << i << "]..." << endl;
recurse(i,0,"");
}
return 0;
}
void recurse(int width, int position, string baseString) {
for(int i=0;i<35;i++) {
if (position < width-1) {
recurse(width, position + 1, baseString+chars[i]);
}
checkPassword(baseString+chars[i]);
}
}
void checkPassword(string password) {
if (password==t) {
cout << "match [" << password << "]" << endl;
exit(1);
}
}
|
|
|
|
|
Very interesting, but this has nothing to do with your original question as far as I can see.
It's time for a new signature.
|
|
|
|
|
Where's the "Mark as Homework" button?
Steve
|
|
|
|
|
Thanks for comment but there is no "Mark as Homework" button
|
|
|
|
|
|
|
|
Hi
can anyone give me some examples or tutorial for list control in SDI FormViews
I m bugged of this..
|
|
|
|
|
I'm not sure whether you are using MFC, but CListView[^] should help you.
It's time for a new signature.
|
|
|
|
|
Ya i m using mFC
I m tryin to use List Control in Form View.
I m gettin error..Thts y..
|
|
|
|
|
hellogany wrote: I m gettin error
And you think maybe I can guess what that is? Try and explain your problem clearly, if necessary post some of your code and explain exactly what the error is and which line of the code it occurs on.
It's time for a new signature.
|
|
|
|
|
hellogany wrote: I m gettin error
You know, we can't see your screen from here. So, if you don't provide a clear description of your problem, we won't be able to help you.
|
|
|
|
|
Hi Sorry for not explaining the problem..
Actually i m havin an application in windows explorer view.
Left view contains a tree view with various items,
Upon clicking an item in treeview , a form view appears in right window.
In one of the form view i m using an list control ..
I m trying the insert the column name in OnshowWindow or in Oncreate() windows.
But both of them throws assertion error.
Kindly go through the below code..
m_listctrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
CRect rect;
m_listctrl.GetClientRect(&rect);
int ctl=rect.Width()/10;
m_listctrl.InsertColumn(0,"ORDERNO",LVCFMT_LEFT,ctl);
m_listctrl.InsertColumn(1,"MOLDNO",LVCFMT_LEFT,ctl);
m_listctrl.InsertColumn(2,"OD TYPE",LVCFMT_LEFT,ctl);
m_listctrl.InsertColumn(3,"ESTAB DATE",LVCFMT_LEFT,ctl);
Is ther property of the form view or the list control to be changed??
Any solutions will be highly appreciated.
|
|
|
|
|
hellogany wrote: But both of them throws assertion error.
Please understand, we cannot see your screen and we cannot guess what errors you are getting.
It's time for a new signature.
|
|
|
|
|
Hi
This is the error i get
Debug Assertion Error
f:\rtm\vctools\vc7libs\ship\atlmfc\include\afxcmn2.inl
Line 113
|
|
|
|
|