Click here to Skip to main content
15,887,485 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: EnableMenuItem does not work Pin
valikac3-Jun-03 9:34
valikac3-Jun-03 9:34 
GeneralRe: EnableMenuItem does not work Pin
Shay Harel3-Jun-03 9:48
Shay Harel3-Jun-03 9:48 
GeneralRe: EnableMenuItem does not work Pin
Mike Upton4-Jun-03 0:22
Mike Upton4-Jun-03 0:22 
Generalactivex including a dll/lib Pin
Anonymous3-Jun-03 9:10
Anonymous3-Jun-03 9:10 
GeneralEvent like CEvent Pin
act_x3-Jun-03 8:52
act_x3-Jun-03 8:52 
GeneralRe: Event like CEvent Pin
Anonymous3-Jun-03 9:14
Anonymous3-Jun-03 9:14 
GeneralRe: Event like CEvent Pin
Peter Weyzen3-Jun-03 11:54
Peter Weyzen3-Jun-03 11:54 
GeneralError in Subclass ......help me Pin
_skidrow_vn_3-Jun-03 8:24
_skidrow_vn_3-Jun-03 8:24 
My problem only shows in Windows98SE not in WindowsXPpro (I tested it both in 98SE and XPpro)
When i compile this code in Windows98SE by VC6
it's okay but when I debug >> F5
It shows Error Message look like this

First-chance exception in SkidRow2.exe (GDI32.DLL): 0xC0000005: Access Violation.

Whenever SubclassButtonProc is called, that Err msg show again....... more and more
finally, graphic interface of my Button is disorder
This error cause my code but I dont know how to fix it........ I dont know where is it? where the error in my code?
could you help me to find it
thank you

MyProject(65KB)
=========================================================

<br />
//////////////////////////////////////////////////////////////////////////////////////////<br />
// GetWindowRect() => left,top,right,bottom tinh theo he toa do cua SCREEN<br />
// GetClientRect() => luon cho ra ket qua 0,0,width,height<br />
//////////////////////////////////////////////////////////////////////////////////////////<br />
LRESULT CALLBACK SubclassButtonProc(HWND hWndButton, UINT Msg, WPARAM wParam, LPARAM lParam)<br />
{<br />
	//return 0;<br />
<br />
	static INT	fLButtonDown;<br />
	static INT	fMouseIn;<br />
	static INT	fDrawMouseOut;<br />
	HDC			hDC;<br />
<br />
	RECT		rect;	<br />
	POINT		pt;<br />
<br />
	GetCursorPos(&pt);<br />
	GetWindowRect(hWndButton, &rect);	<br />
<br />
	switch(Msg)<br />
	{<br />
		case WM_LBUTTONDBLCLK:		<br />
			fMouseIn=1;						<br />
			goto Work;<br />
		case WM_MOUSEMOVE:<br />
			// dang SetCapture()<br />
			if (!PtInRect(&rect,pt))<br />
			{<br />
				fMouseIn=0;<br />
				<br />
				if (!fDrawMouseOut)<br />
				{<br />
					InvalidateRect(hWndButton, NULL, TRUE);<br />
					fDrawMouseOut=1;<br />
				}<br />
				return FALSE;<br />
			}<br />
			else<br />
				fDrawMouseOut=0;<br />
				<br />
			<br />
			// khong bi SetCapture()<br />
			if (!fMouseIn)<br />
			{	<br />
				<br />
				fMouseIn=1;<br />
				InvalidateRect(hWndButton, NULL, TRUE);<br />
//*				<br />
				TRACKMOUSEEVENT tme;<br />
				tme.cbSize		=sizeof(tme);<br />
				tme.dwFlags		=TME_LEAVE;<br />
				tme.dwHoverTime	=HOVER_DEFAULT;<br />
				tme.hwndTrack	=hWndButton;<br />
				_TrackMouseEvent(&tme);<br />
//*/<br />
				return FALSE;<br />
			}<br />
			return FALSE;<br />
		case WM_MOUSELEAVE:					<br />
			if(fMouseIn) <br />
			{<br />
				fMouseIn=0;				<br />
<br />
				InvalidateRect(hWndButton, NULL, TRUE);<br />
				return FALSE;<br />
			}<br />
			InvalidateRect(hWndButton, NULL, TRUE);<br />
			return FALSE;<br />
Work:<br />
		case WM_LBUTTONDOWN:<br />
			SetCapture(hWndButton);<br />
///*<br />
			{<br />
				HDC hdc;<br />
				CHAR buffer[100];<br />
				static i;<br />
				hdc=GetDC(hWnd);<br />
				i++;<br />
				sprintf(buffer,"down %d time(s)",i);<br />
				TextOut(hdc,0,60,buffer, strlen(buffer));<br />
				ReleaseDC(hWnd,hdc);<br />
			}<br />
//*/<br />
			fLButtonDown=1;<br />
			InvalidateRect(hWndButton, NULL, TRUE);<br />
			return FALSE;<br />
		<br />
		case WM_LBUTTONUP:<br />
			{	<br />
				HDC hdc;<br />
				CHAR buffer[100];<br />
				static i;<br />
				hdc=GetDC(hWnd);<br />
				i++;<br />
<br />
				if (!PtInRect(&rect,pt))<br />
				{<br />
					sprintf(buffer,"up %d time(s) --- x=%d y=%d out left=%d top=%d right=%d bottom=%d"<br />
					,i,pt.x,pt.y,rect.left,rect.top,rect.right,rect.bottom);<br />
					fLButtonDown=0;<br />
					ReleaseCapture();<br />
					return FALSE;<br />
				}<br />
				else<br />
				{<br />
					sprintf(buffer,"up %d time(s) --- x=%d y=%d in left=%d top=%d right=%d bottom=%d"<br />
					,i,pt.x,pt.y,rect.left,rect.top,rect.right,rect.bottom);<br />
				}<br />
<br />
<br />
				TextOut(hdc,0,90,buffer, strlen(buffer));<br />
				ReleaseDC(hWnd,hdc);<br />
			}<br />
			fLButtonDown=0;			<br />
			ReleaseCapture();<br />
			InvalidateRect(hWndButton, NULL, TRUE);<br />
	<br />
			// user push button<br />
			if (TRUE)			<br />
			{<br />
				//////////////////////////////////////////////////////<br />
				//TO DO: EVENT, WHAT USER WANT WHEN CLICK BUTTON<br />
				//////////////////////////////////////////////////////<br />
				//MessageBox(NULL,"EVENT","",MB_OK);<br />
				HDC hdc;<br />
				CHAR buffer[100];<br />
				static i;<br />
				hdc=GetDC(hWnd);<br />
				i++;<br />
				sprintf(buffer,"push %d time(s)",i);<br />
				TextOut(hdc,0,0,buffer, strlen(buffer));<br />
				ReleaseDC(hWnd,hdc);<br />
			}				<br />
			return FALSE;<br />
		case WM_PAINT:<br />
			/////////////////////////////////////////////////////////////			<br />
			// WM_PAINT hanlder<br />
			// WM_MOUSELMOVE, WM_MOUSELEAVE inform ------> <br />
			// WM_PAINT handler process these notify messages<br />
			// InvaliateRect(), BeginPaint().....<br />
			/////////////////////////////////////////////////////////////<br />
			INT			SaveBkMode;<br />
			COLORREF	SaveTextColor;					<br />
			HDC			hMemDC;<br />
			HFONT		hSaveFont;<br />
			HBITMAP		hbmImage, hbmSave;<br />
			CHAR		szCaption[30];<br />
			CHAR		cIndex;<br />
			WORD		xImage, yImage, xText, yText;<br />
			SIZE		size;<br />
			PAINTSTRUCT	ps;<br />
			RECT		rect;	<br />
<br />
			GetClientRect(hWndButton, &rect);	// use GetWindowRect >> NO RESULT<br />
			hDC=BeginPaint(hWndButton, &ps);<br />
<br />
				HDC hdc;<br />
				CHAR buffer[100];<br />
				static i;<br />
				hdc=GetDC(hWnd);<br />
				i++;<br />
				sprintf(buffer,"redraw %d time(s)",i);<br />
				TextOut(hdc,0,30,buffer, strlen(buffer));<br />
				ReleaseDC(hWnd,hdc);<br />
<br />
			hSaveFont=(HFONT)SelectObject(hDC, hFontCaption);<br />
			GetWindowText(hWndButton, szCaption, strlen(szCaption));<br />
			hbmImage=LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));<br />
			<br />
			cIndex=0;<br />
			<br />
			hMemDC=CreateCompatibleDC(NULL);<br />
<br />
			BITMAP bm;<br />
			GetObject(hbmImage, sizeof(bm), &bm);<br />
			<br />
			GetTextExtentPoint32(hDC, szCaption, lstrlen(szCaption), &size); <br />
			xImage=rect.left+((rect.right-rect.left)-(bm.bmWidth + size.cx +4))/2;<br />
			yImage=rect.top+((rect.bottom-rect.top)-bm.bmHeight)/2;<br />
			xText=xImage+bm.bmWidth+4;<br />
			yText=rect.top+((rect.bottom-rect.top)-size.cy)/2;<br />
			SaveBkMode=SetBkMode(hDC, TRANSPARENT);<br />
			SaveTextColor=SetTextColor(hDC, RGB(0,0,0));<br />
			<br />
			hbmSave=(HBITMAP)SelectObject(hMemDC, hbmImage);<br />
			if (!fMouseIn)		// mouse out button<br />
			{<br />
				WINDOW::DrawGradientRect(hDC, rect, WCOLOR1, WCOLOR3, 0);<br />
				TransparentBlt(hDC, xImage,yImage,bm.bmWidth, bm.bmHeight, hMemDC, 0,0, bm.bmWidth, bm.bmHeight,RGB(255,255,255));<br />
				TextOut(hDC, xText, yText, szCaption, strlen(szCaption));<br />
			}<br />
			else				// mouse in button<br />
			{<br />
				WINDOW::DrawGradientRect(hDC, rect, WCOLOR1,WCOLOR2, 0);<br />
				TransparentBlt(hDC, xImage,yImage,bm.bmWidth, bm.bmHeight, hMemDC, 0,0, bm.bmWidth, bm.bmHeight,RGB(255,255,255));<br />
				TextOut(hDC, xText, yText, szCaption, strlen(szCaption));<br />
			}<br />
<br />
			// push button slowly then OKAY<br />
			// push button quickly then ERROR, ???????????????????????			<br />
			if (fLButtonDown && fMouseIn)	// Lbutton down<br />
			{<br />
				// redraw Background<br />
				WINDOW::DrawGradientRect(hDC, rect, WCOLOR1, WCOLOR2, 0);<br />
				rect.left	+=2;<br />
				rect.top	+=2;				<br />
				TransparentBlt(hDC, xImage+2, yImage+2,bm.bmWidth, bm.bmHeight, hMemDC, 0,0, bm.bmWidth, bm.bmHeight,RGB(255,255,255));<br />
				TextOut(hDC, xText+2, yText+2, szCaption, strlen(szCaption));<br />
				rect.left	-=2;<br />
				rect.top	-=2;				<br />
<br />
				DrawEdge(hDC, &rect, EDGE_SUNKEN, BF_RECT);	<br />
			}<br />
			else				// Lbutton up<br />
			{<br />
				DrawEdge(hDC, &rect, EDGE_RAISED, BF_RECT);	<br />
			}<br />
<br />
			// free all<br />
			SetTextColor(hDC, SaveTextColor);<br />
			SetBkMode(hDC, SaveBkMode);<br />
			SelectObject(hMemDC, hbmSave);<br />
			DeleteDC(hMemDC);<br />
			SelectObject(hDC, hSaveFont);<br />
			DeleteObject(hSaveFont);<br />
			DeleteObject(hbmSave);			<br />
			EndPaint(hWndButton, &ps);<br />
			return TRUE;<br />
		default: <br />
			return CallWindowProc(OriButtonProc, hWndButton, Msg, wParam, lParam);			<br />
	}	<br />
}

Generalproper format of ,,for loop in C++.NET Pin
mr20033-Jun-03 7:57
mr20033-Jun-03 7:57 
GeneralRe: proper format of ,,for loop in C++.NET Pin
Maximilien3-Jun-03 8:03
Maximilien3-Jun-03 8:03 
GeneralSetting string variables Pin
beginningStudent3-Jun-03 6:43
sussbeginningStudent3-Jun-03 6:43 
GeneralRe: Setting string variables Pin
valikac3-Jun-03 7:43
valikac3-Jun-03 7:43 
GeneralRe: Setting string variables Pin
Anonymous3-Jun-03 7:45
Anonymous3-Jun-03 7:45 
GeneralRe: Setting string variables Pin
jhwurmbach3-Jun-03 8:13
jhwurmbach3-Jun-03 8:13 
GeneralSplitter Pin
sulaxan3-Jun-03 6:32
sulaxan3-Jun-03 6:32 
GeneralRe: Splitter Pin
Anonymous3-Jun-03 10:47
Anonymous3-Jun-03 10:47 
GeneralRe: Splitter Pin
sulaxan3-Jun-03 18:46
sulaxan3-Jun-03 18:46 
GeneralEdit box Pin
will13833-Jun-03 6:12
will13833-Jun-03 6:12 
GeneralRe: Edit box Pin
valikac3-Jun-03 7:45
valikac3-Jun-03 7:45 
GeneralRe: Edit box Pin
will13833-Jun-03 8:48
will13833-Jun-03 8:48 
GeneralRe: Edit box Pin
basementman9-Jun-03 6:27
basementman9-Jun-03 6:27 
GeneralUpdating window when drawing Pin
Rage3-Jun-03 6:09
professionalRage3-Jun-03 6:09 
GeneralRe: Updating window when drawing Pin
valikac3-Jun-03 7:48
valikac3-Jun-03 7:48 
GeneralRe: Updating window when drawing Pin
Maximilien3-Jun-03 8:05
Maximilien3-Jun-03 8:05 
GeneralMultimedia timers Pin
act_x3-Jun-03 5:31
act_x3-Jun-03 5:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.