|
There is no MFC version, as there is no icon wrapper class (CIcon) for MFC. All this is handled by the CBitmap class, and unfortunately, it does not directly support creation of icons.
Under MFC, you can get the application instance handle by calling a global (macro) function AfxGetInstanceHandle . Alternatively, you can query for AfxGetApp to get the CWinApp class, and use it's CWinApp::m_hInstance data member. The prior function call is a macro wrapper for this approach.
Nothing prevents you from using the Win32 API calls ::CreateIcon and ::DestroyIcon to manage a HICON object in the MFC environment. Note, that the MFC's clean-up framework is not available, so you must be very careful to release and destroy all reserved memory and objects, otherwise your application will cause memory leaks.
You can set the cursor by using ::SetCursor and restore the default cursor by using the same method. Know, though, that for MFC classes derived from CWnd, you must overwrite the CWnd::SetCursor method and determine some sort of a method to decide what cursor to load (by using ::SetCursor).
The default implementation of this function always sends the call down to the base class, and thus, the resulting icon will always be the default one. This manifests itself so that if you call ::SetCursor without overriding the respective method, then the cursor will change, but instantly as you move the mouse (or the cursor), it will be reverted back to the original one.
To restore the icon when it is no longer needed, call ::SetCursor with IDC_ARROW parameter, or pass the call to the base class, which will use the IDC_ARROW as default. After the icon has been detached from the cursor, you can destroy it (the icon) and free the memory it reserved.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Thank you for the detailed answer. Appreciate it .
ns
|
|
|
|
|
I am trying to hook a 3rd Party Window.
Just a little background:
After I get the handle of this window, I use the 'GetWindowThreadProcessId' to get the Thread Id of the window.
Code:
dwThreadId = ::GetWindowThreadProcessId(hwndTskMgr, NULL);
-----------------------------------------------------------------------------
Then I am calling the 'SetWindowsHookEx' function.
Code:
g_hhook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hinstDll, dwThreadId);
-----------------------------------------------------------------------------
In function 'GetMsgProc', I am trying to monitor the 'SB_SETTEXT' or 'WM_SETTEXT' message to be able to detect when the ‘3rd Party Window’ sets the text of the status bar.
Code:
LRESULT CALLBACK GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
char msg5[255];
wsprintf(msg5, "Inside GetMsgProc & code = %d",code);
::OutputDebugString(msg5); // Just a test
if (code < 0)
{
return CallNextHookEx(g_hhook, code, wParam, lParam);
}
if ((code == HC_ACTION) && (wParam == PM_REMOVE))
{
::OutputDebugString("In code is HC"); // Just a test
MSG *pMsg = (MSG*)lParam;
if(pMsg->message == WM_SETTEXT)
::OutputDebugString("WM_SETTEXT was found\n");
else
::OutputDebugString("WM_SETTEXT was not found\n");
}
return CallNextHookEx(g_hhook, code, wParam, lParam);
}
-----------------------------------------------------------------------------
Problem:
In 'SetWindowsHookEx' I am using 'WH_GETMESSAGE' type of hook procedure, which would give a call to 'GetMsgProc'.
But the CALLBACK GetMsgProc function is not getting called. And some time the GetMsgProc function gets called but my whole system gets stuck up and hangs. And then I need to restart the system.
I have gone through a lot of code in 'CodeGuru.com' as well as in 'CodeProject.com', and have tried many combinations but still am not able to hook the various messages of the Task Manager. I am not able to figure out where I am going wrong.
Any help in this regard would be really appreciated.
|
|
|
|
|
Hello.
I have the dialog based application. I changed the dialog color in the InitInstance function using the following code: SetDialogBkColor(RGB(224, 235, 244));
I added the menu to the dialog. The color of the menu bar is not changed, it's still gray as was before.
How can I change the menu bar color?
Thank you in advance,
Olga Sayenko (olga@nisko.co.il).
|
|
|
|
|
The Menu-Bar is part of the Window's Non-client-Area. Only the Window's Client-Area is affected by the color you specified in SetDialogBkColor.
Changing the menu-bar's color is not supported without some headache, which consists of taking-over OnNcPaint() and somehow clearing the meu-bar-area to your selected color...
I think there was a codeproject article that talked about a hacky way to do this, but I can't find it...
BEHATZLAHA
|
|
|
|
|
dear all
In windows, from explorer, by clicking the right button
we can see the file properties, including the owner of the file.
How can I get that properties by the program in VC++,
I need the owner and also the property of access authority
such as : read only, read write etc
I am looking forward your reply
regards
hb.sapto nugroho
sapto@fstream.net
|
|
|
|
|
Are you talking about GetFileAttributes() ?
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
I am not sure if file owner and
file acess authority (readonly, readwrite,etc)
are in GetFileAttributes.
If the properties that I mean are also
can be taken by GetFileAttributes,
then tell me how to coding it.
regards
|
|
|
|
|
hb.sapto nugroho wrote:
I am not sure if file owner and
file acess authority (readonly, readwrite,etc)
are in GetFileAttributes.
Use GetNamedSecurityInfo() and LookupAccountSid() for owner. Use GetFileAttributes() for the other two.
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
dear David
thanks for helping me.
I found difficulty in real coding.
Would you mind to write the sample coding of it.
I found error:
GetNamedSecurityInfo is not member of global namespace
also for LookupAccountSid.
looking your help
hb.sapto nugroho
|
|
|
|
|
hb.sapto nugroho wrote:
I found difficulty in real coding.
Does that imply there is "fake" coding?
hb.sapto nugroho wrote:
GetNamedSecurityInfo is not member of global namespace
also for LookupAccountSid.
How are you using them?
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
How to take screenshots from the VC program?
|
|
|
|
|
|
Don't try it, just do it!
|
|
|
|
|
Nonsence answer.
MSN Messenger.
prakashnadar@msn.com
Tip of the day of visual C++ IDE.
"We use it before you do! Visual C++ was developed using Visual C++"
|
|
|
|
|
|
See if either of these two articles help:
http://flounder.com/screencapture.htm
http://flounder.com/printbitmap.htm
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
Thanks a lot, u read me well, I will check it an let u know
|
|
|
|
|
Hi,
I am struggling to convert some functions from a C++ DLL to some function references in VB.net
I dont program in C++, so I am hoping someone can help me with converting a couple of function prototypes:
This are the C++ prototypes:
CP2101_Open(DWORD dwDevice, HANDLE* cyHandle);
CP2101_GetProductString(DWORD dwDeviceNum, LPVOID lpvDeviceString, DWORD dwFlags);
CP2101_Close(HANDLE cyHandle );
This is what i have in vb.net:
Public Declare Function CP2101_Open Lib "CP2101.dll" (ByVal DeviceNum As Long, ByRef Handle As Long) As Integer
Public Declare Function CP2101_GetProductString Lib "CP2101.dll" (ByVal DeviceNum As Long, ByRef DeviceString As String, ByVal Options As Long) As Integer
Public Declare Function CP2101_Close Lib "CP2101.dll" (ByVal DeviceNum As Long) As Integer
I am not sure that I am converting the pointer data types correctly etc from C++ to Vb.net. If some could check my work.
Thanks
Barry
|
|
|
|
|
What problems are you experiencing here?
The VB declarations look OK to me.
Ant.
|
|
|
|
|
These
nelsonbd wrote:
This are the C++ prototypes:
not true!
These are C prototypes, else they would have very crazy export names in C++ name convention!
Don't try it, just do it!
|
|
|
|
|
The potential problem I see is in interpreting the LPVOID DeviceString as a ByRef String. If I remember my VB right, a ByRef String is passed to a C function as a pointer to BSTR. That may not be (probably is not) what the C function is expecting.
An LPVOID doesn't give very much information about what it is expecting: it could be a null-terminated string, a null-terminated wide-string, a BSTR or perhaps a pointer to BSTR. Do you have source for that C function, or a C example of its use?
|
|
|
|
|
Firstly, you should normally use System.IntPtr for opaque pointer types when using VB.NET. This will help you if you ever port to 64-bit (the IntPtr type is 32 bit in a 32-bit process but 64 bits in a 64-bit process).
As for CP2101_GetProductString, if the C/C++ code is interpreting the lpvDeviceString parameter as a string, you should use
Public Declare Function CP2101_GetProductString Lib "CP2101.dll" ( _
ByVal DeviceNum As Long, _
ByVal DeviceString As String, _
ByVal Options As Long) As Integer ByRef indicates an in/out parameter. If the function alters this data, you should use a StringBuilder object instead (still passed ByVal ), and set its Capacity to the maximum size you expect the function to write.
If you're getting MissingMethodException s, your DLL's exports may be mangled. To verify this, use dumpbin /exports . If the output contains ? characters and no recognisable function names, the names are mangled. You have two choices. Either you can rewrite your declarations to use the DllImportAttribute rather than Declare, and use the EntryPointName property to indicate the mangled name, or you can specify extern "C" in front of the exported function declarations to tell the compiler not to mangle the names. Remember that the latter will break binary compatibility with any existing clients.
Stability. What an interesting concept. -- Chris Maunder
|
|
|
|
|
Hi guys,
A question:
I got a class A that has a overridden copy constructor and assignment operator.
I derive class B from A.
*If B does not have an overridden copy constructor or assignment operator will the assignments of objects of class B invoke the copy constr. or assign operator of class A for the A part of class B(if you know what I mean)?
eg:
class A
{
class A();
class A( const A& a);
A& operator=(const A& a);
...
};
class B: public A
{
...
};
int main()
{
B obj1, obj2;
...
obj2 = obj1; //is operator= of class A called?
B obj3 = obj2; // is copy construct of class A called?
}
Greetings,
Davy
|
|
|
|
|
no, you ll have to modify like this
B obj1;
A obj2;
obj2 = obj1; //operator= of class A is called
A obj3 = obj2; //copy construct of class A is called
but remember ur objects will have to be sliced..
greatest thing is to do wot others think you cant suhredayan@omniquad.com>
messenger :suhredayan@hotmail.com
|
|
|
|
|