|
You mean the below code will return the handle for second notepad ?
hWnd = ::FindWindow( 0, L"Untitled - Notepad " );
-Cvaji
|
|
|
|
|
No, i mean something like this:
HWND hWnd;
while ((hWnd = ::FindWindow(0, L"Untitled - Notepad")) != NULL)
{
::SetWindowText(hWnd, L"Untitled - Notepad ");
}
Since you add a space at the end of the window text, the next time you call FindWindow, it will not find this window you already used (since it's title does not mach your search string anymore) and go on looking for the next one, if you find that next one, you add a space to that one too and so on untill you get no more windows...
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Sometimes you just have to hate coding to do it well. <
|
|
|
|
|
Wow.
Hats off you man
even though its an ugly method, i congratulate your brilliancy
But I got another method.
HWND hWnd = ::FindWindow( L"Notepad", 0 );
hWnd = ::FindWindowEx( 0, hWnd, L"Notepad", 0 );
-Cvaji
|
|
|
|
|
Gee, thanks FindWindowEx, i better rememeber that for the next time
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Sometimes you just have to hate coding to do it well. <
|
|
|
|
|
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.
|
|
|
|
|