|
My application contains skins which changed by user. Procedure of change occurs as follows:
::OnChangeSkin()
{
if (NULL != m_rgnWindow)
{
::DeleteObject(m_rgnWindow);
m_rgnWindow = NULL;
}
m_rgnWindow = GetRegionFromFile(...);
SetWindowRgn(m_rgnWindow, TRUE);
}
For any paint to call a following method
::OnDisplayWindow()
{
...
::FrameRgn(hMemDC, m_rgnWindow, hBrush, 1, 1);
...
::SelectClipRgn(hMemDC, m_rgnWindow);
::BitBlt();
::SelectClipRgn(hMemDC, NULL);
...
}
In the places specified as "//Error" BoundsChecker finds out a mistake
In what a mistake?
Best regards,
Eugene Pustovoyt
|
|
|
|
|
I had this same problem with CPen - I think it applies to any GDIObject. The object doesn't seem to be completely destroyed. In addition, you should be careful to separate the freeing of resources verses the actual deletion of the object, although Microsoft tries to make them the same with the questionable practice of self deleting functions. I can't be more helpful without seeing more code.
J.
----------------------------
|
|
|
|
|
Hi Everyone,
I'm having problems using messagebox
There is a parameter defined with messagebox, called MB_SERVICE_NOTIFICATION.
I use this parameter in my code:
MessageBox(NULL, "some text", "error", MB_SETFOREGROUND + MB_SERVICE_NOTIFICATION);
But i'm getting a compiler error, MB_SERVICE_NOTIFICATION : Undeclared identifier.
I went on the msdn that describes using messagebox, and it says that i should define _WIN32_WINNT.
So i did, and my preprocessor definition looks like: #define _WIN32_WINNT = 0x0400
I'm still getting the undeclared identifier error message, can someone please help me??? i'm looking at this problem for several hours without any luck.
Thank you in advance
Rico
|
|
|
|
|
just
#define _WIN32_WINNT 0x0400
You can find in winuser.h in the include
#ifdef _WIN32_WINNT
#if (_WIN32_WINNT >= 0x0400)
#define MB_SERVICE_NOTIFICATION 0x00200000L
#else
#define MB_SERVICE_NOTIFICATION 0x00040000L
#endif
#define MB_SERVICE_NOTIFICATION_NT3X 0x00040000L
#endif
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
Thanks for your response,
I already have winuser.h and windows.h defined in the preprocessor definitions.
I also have the code: #define _WIN32_WINNT 0x0400 defined in the preprocessor definitions.
i'm not sure what you're suggesting in your response, can you please clarify?
Thank you
Rico
|
|
|
|
|
Then make sure
NOUSER and NOMB are not defined.
if MB_SERVICE_NOTIFICATION_NT3X works then you have a problem defining or undefining these constants
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
Hi there,
i don't have nouser and nomb defined anywhere.
the error happens during compilation. i'm still confused as to what i'm doing wrong
Thanks for your responses.
|
|
|
|
|
did MB_SERVICE_NOTIFICATION_NT3X work?
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
Hi Papa
replacing MB_SERVICE_NOTIFICATION with MB_SERVICE_NOTIFICATION_NT3X still does not work.
I have the #define _WIN32_WINNT 0x0400 declared
also, changed it to #define _WIN32_WINNT 0x0300 and it still doesn't work.
The error message that I'm recieving is the same, undeclared identifier.
Rico
|
|
|
|
|
What are you trying to do, just to pop a messagebox ?
|
|
|
|
|
You need #define _WIN32_WINNT 0x0400 in the stdafx.h file, above any #include statement.
Five birds are sitting on a fence.
Three of them decide to fly off.
How many are left?
|
|
|
|
|
oh, thank you very much!
i thought i was going to be stuck forever with that error!
just wondering, if the app. i'm building should be compatible with any nt version, should i use
0x0300 instead of 0x0400?
THanks
Rico
|
|
|
|
|
Hey ,I've a dialog based application with a menu (menu bar). It works very well on windows 2000 Professional and Windows XP. But when I open it on Windows 98, there is no menu bar. Instead of the menu you can see a part of the desktop.
What can I do?
I work with Visual Studio 6.0 and I create the menu with the Ressource -Editor. To include the ressource I use this code:
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
ASSERT(menu);
SetMenu(&menu);
Thnak's
Beppo
|
|
|
|
|
Just a guess, but it sounds like Internet Explorer (the Common Control DLL, actually) is not up-to-date on the Windows 98 machine.
Five birds are sitting on a fence.
Three of them decide to fly off.
How many are left?
|
|
|
|
|
Your CMenu object is local, so it will delete its HMENU object in its destructor when it goes out of scope, this could mean that your window has an invalid HMENU selected.
CMenu menu;
menu.LoadMenu(IDR_MAINFRAME);
ASSERT(menu);
SetMenu(&menu);
menu.Detach(); // stop menu being destroyed in destructor
Roger Allen
Sonork 100.10016
Death come early, death come late,
It takes us all, there is no reason.
For every purpose under heaven,
To each a turn, to each a season.
A time to weep and a time to sigh,
A time to laugh and a time to cry,
A time to be born and a time to die.
Dust to dust and ashes to ashes,
And so I end my song.
|
|
|
|
|
Thanks Roger, now it works
|
|
|
|
|
This happens for shortcuts to web-pages that can't be reached or something in that area.
My program can't have this message-box popup when a thumbnail cannot be fetched, what can i do about it ?
thank you
|
|
|
|
|
I'm developping programs on wince using evc3.0
I made a new project using WCE ATL COM AppWizard with MFC support.I got no compile errors when i create a simple object.But when i create a full control or lite control,i got compile errors like this:
......error C2504: 'IBindStatusCallback' : base class undefined
......error C2061: syntax error : identifier 'IBinding'
......
the same project under vc6.0 i got no problem.I knew there are many limitations in evc.Does my problem stands for "mfc and atl won't cooperate with each other under wce?"
i have struggled on this problem for one day. i'm too tired now.
But i need to use CInternetSession class(MFC class) in my ATL COM Control(full control) project. Anybody can give me a hand?
Thanks a lot!
|
|
|
|
|
hi all,
i am trying to force a tab current selection as follows:
HWND hWnd = m_hWnd;
while (NULL != (hWnd = ::GetWindow(hWnd,GW_HWNDNEXT)) )
{
::SendMessage(hWnd,TCM_SETCURSEL,(WPARAM)iIndex,(LPARAM)0);
}
i do get to the see the tab header being shown, but the dialog that is attached to the tab is not shown......
can any1 help???
thanks
|
|
|
|
|
This happens because of the way a tab control works.
The TCM_SETCURSEL message only sets the selected tab index as active. It does not, like stated in the Platform SDK Reference, send TCM_SELCHANGING and TCM_SELCHANGE messages. The general tab control available in Platform SDK (SysTabControl32 window class) handles the changing of the page in the TCM_SELCHANGING and TCM_SELCHANGE message handlers. First is called first, and is responsible for hiding the current page. The latter is sent (and handled) next, and it is responsible for showing the new page.
There are (at least) two solutions to this problem:
1. Override your tab control's TCM_SETCURSEL message handler to send TCM_SELCHANGING and TCM_SELCHANGE messages, which will then swap the page. This is necessary if your tab control has TCM_BUTTONS style set, or you are using a tab control which is not based on the SysTabControl32 class.
2. If your tab control does not have TCM_BUTTONS style set, you can use TCM_SETCURFOCUS message to set the focus to the specified tab. This message will cause TCM_SELCHANGING and TCM_SELCHANGE messages to be sent to the tab control, thus switching the page as well.
If you use MFC, the correct message-map entry is ON_COMMAND (TCM_SETCURSEL, <function>) and the function prototype is afx_msg LRESULT <function>(WPARAM wParam, LPARAM lParam) . Same rules apply for TCM_SELCHANGING and TCM_SELCHANGE, if you need to override them.
However, if you use a CCtrlView class as the base, the message map entry is ON_NOTIFY_REFLECT . See MFC Reference for more details about this.
Alternatively, instead of sending messages, you can use the TabCtrl_SetCurFocus macro. In Platform SDK, this macro requires a HWND of the tab and the index to be selected. If you use MFC's CTabCtrl class or it's derivates, you can use the SetCurFocus member method to achieve the same results.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
how to replace the following function with constructor
void Cat::setAge(long age,char name[])
{
strcpy(cName, name);
cAge = age;
}
|
|
|
|
|
Something like this?
Cat::Cat(long age, const char const* name)
{
strcpy(cName, name);
cAge = age;
}
Cat aCat(3, "Fred");
Roger Allen
Sonork 100.10016
Death come early, death come late,
It takes us all, there is no reason.
For every purpose under heaven,
To each a turn, to each a season.
A time to weep and a time to sigh,
A time to laugh and a time to cry,
A time to be born and a time to die.
Dust to dust and ashes to ashes,
And so I end my song.
|
|
|
|
|
Replace setAge by Cat and remove the void
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
Hi!
I have a problem and I cannot find the solution for it. I am using the win32 api to create a database application and I am sending sql statements to retrieve and put data.
In my access database I have a field called TEST, it is a text field. The thing I want to do is to add some text to it everytime the user opens my program. For that I am using:
<br />
_bstr_t sqlquery;<br />
LPTSTR tester = "";<br />
LPTSTR no = "12";<br />
char formula[MAX_PATH];<br />
sprintf(formula, "\"UPDATE TABLO SET TEST = '%s' WHERE (NO = '%s')\"", tester, no); <br />
sqlquery = (_bstr_t)formula;<br />
try<br />
{<br />
pSet = pDb->Execute(sqlquery, &vRecsAffected, adOptionUnspecified);<br />
}<br />
catch( _com_error &e )<br />
{<br />
bstr_t bstrSource(e.Source());<br />
_bstr_t bs = _bstr_t(" Error: ") + _bstr_t(e.Error()) + _bstr_t(" Mesaj: ") + _bstr_t(e.ErrorMessage()) + _bstr_t("\nHata Tanımı:\n") <br />
+ _bstr_t(e.Description()); <br />
MessageBox(0,bs,bstrSource, MB_OK);<br />
}<br />
<br />
And when my program runs it gives me an error like:
"Error: -2147217900 Message: IDispatch error #3092"
I am really confused Please help me!
Thank you very much for your future answers!
(Note the code up there works if there is less than 8 or 9 characters... )
Well... I am a beginner ...
|
|
|
|
|
What type of object is pDb ? At first I thought it was a CDatabase object, but that class has no Execute() method.
Have you tried Googling for the error?
http://www.google.com/search?hl=en&ie=UTF-8&oe=UTF-8&q=idispatch+3092&btnG=Google+Search
Five birds are sitting on a fence.
Three of them decide to fly off.
How many are left?
|
|
|
|