Hej 
Jeg brugte denne kode i Vis c++ (miro)
void CMatildeView:

nKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	CPoint ScrollPoint=GetScrollPosition();
	CRect rect;
	CString msg1;
	msg1="";
	GetWindowRect(rect);
	rect=rect-ScrollPoint;
	if(nChar==VK_SHIFT)
		bShift=1;	
	if(bShift)
	  nRepCnt=nJumpCnt;
	else
	  nRepCnt=1;
	switch(nChar) 	
	{
	case VK_DIVIDE:
		{
		nJumpCnt=10+nJumpCnt;
	    msg1.Format("Snap : %d",nJumpCnt);
		}
	break;
	case VK_MULTIPLY:
		{
		 nJumpCnt=10;
 		 msg1.Format(" Snap grip : %d",nJumpCnt);
		}
	break;
	case VK_ADD:
		{
		 nJumpCnt++;
		 msg1.Format(" Snap grip : %d",nJumpCnt);
		}
	break;
	case VK_SUBTRACT:
		{
		nJumpCnt--;
		 msg1.Format(" Snap grip : %d",nJumpCnt);
		}
	break;
	case VK_SHIFT:
		{
		 msg1.Format(" Snap grip : %d",nRepCnt);
		}
	break;
	case VK_NUMPAD0:;
	case '0'://0 eller keypad 0
		{
			if(AntalPoints>0)
			{
			 SetCursorPos(Points[1].x+rect.left,Points[1].y+rect.top);
			 nPunkt=1;
			}
			else msg1.Format("Placer min 1 punkt ellers har 0 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD1:
	case '1'://1 eller keypad 1
		{
			if(AntalPoints>1)
			{
			 SetCursorPos(Points[2].x+rect.left,Points[2].y+rect.top);
			 nPunkt=2;
			}
			else msg1.Format("Placer min 2 punkt ellers har 1 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD2:
	case '2'://2 eller keypad 2
		{
			if(AntalPoints>2)
			{
			 SetCursorPos(Points[3].x+rect.left,Points[3].y+rect.top);
			 nPunkt=3;
			}
			else msg1.Format("Placer min 3 punkt ellers har 2 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD3:
	case '3'://3 eller keypad 3
		{
			if(AntalPoints>3)
			{
			 SetCursorPos(Points[4].x+rect.left,Points[4].y+rect.top);
			 nPunkt=4;
			}
			else msg1.Format("Placer min 4 punkt ellers har 3 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD4:
	case '4'://4 eller keypad 4
		{
			if(AntalPoints>4)
			{
			 SetCursorPos(Points[5].x+rect.left,Points[5].y+rect.top);
			 nPunkt=5;
			}
			else msg1.Format("Placer min 5 punkt ellers har 4 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD5:
	case '5'://5 eller keypad 5
		{
			if(AntalPoints>5)
			{
			 SetCursorPos(Points[6].x+rect.left,Points[6].y+rect.top);
			 nPunkt=6;
			}
			else msg1.Format("Placer min 6 punkt ellers har 5 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD6:
	case '6'://6 eller keypad 6
		{
			if(AntalPoints>6)
			{
			 SetCursorPos(Points[7].x+rect.left,Points[7].y+rect.top);
			 nPunkt=7;
			}
			else msg1.Format("Placer min 7 punkt ellers har 6 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD7:
	case '7'://7 eller keypad 7
		{
			if(AntalPoints>7)
			{
			 SetCursorPos(Points[8].x+rect.left,Points[8].y+rect.top);
			 nPunkt=8;
			}
			else msg1.Format("Placer min 8 punkt ellers har 7 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD8:
	case '8'://8 eller keypad 8
		{
			if(AntalPoints>8)
			{
			 SetCursorPos(Points[9].x+rect.left,Points[9].y+rect.top);
			 nPunkt=9;
			}
			else msg1.Format("Placer min 9 punkt ellers har 8 ikke nogen funktion. (0 er start punkt)");
		} 
	break;
	case VK_NUMPAD9:
	case '9'://9 eller keypad 9
		{
			if(AntalPoints>9)
			{
			 SetCursorPos(Points[10].x+rect.left,Points[10].y+rect.top);
			 nPunkt=10;
			}
			else msg1.Format("Placer min 10 punkt ellers har 9 ikke nogen funktion. (0 er start punkt)");			
		} 
	break;
	case VK_RIGHT://Pile tast mod højre
		{
			if(AntalPoints>0)
			{
			 Points[nPunkt].x=Points[nPunkt].x+nRepCnt;
			 SetCursorPos(Points[nPunkt].x+rect.left,Points[nPunkt].y+rect.top);
			 Invalidate();
			} 
			else msg1.Format("Tegn min 1 punkt ellers har pil mod højre ikke nogen funktion.");
		}
	break;
	case VK_LEFT://Pile tast mod venstre
		{
			if(AntalPoints>0)
			{
			 Points[nPunkt].x=Points[nPunkt].x-nRepCnt;
			 SetCursorPos(Points[nPunkt].x+rect.left,Points[nPunkt].y+rect.top);
			 Invalidate();
			}
			else msg1.Format("Placer min 1 punkt ellers har pil mod venstre ikke nogen funktion.");
		} 
	break;
	case VK_DOWN://Pile tast ned
		{
			if(AntalPoints>0)
			{
			 Points[nPunkt].y=Points[nPunkt].y+nRepCnt;
			 SetCursorPos(Points[nPunkt].x+rect.left,Points[nPunkt].y+rect.top);
			 Invalidate();
			}
			else msg1.Format("Placer min 1 punkt ellers har pilned ikke nogen funktion.");
		} 
	break;
	case VK_UP://Pile tast op
		{
			if(AntalPoints>0)
			{
			 Points[nPunkt].y=Points[nPunkt].y-nRepCnt;
			 SetCursorPos(Points[nPunkt].x+rect.left,Points[nPunkt].y+rect.top);
			 Invalidate();
			}
			else msg1.Format("Placer min 1 punkt ellers har pilop ikke nogen funktion.");
		} 
	break;
	case VK_NUMLOCK://
		{
		} 
	break;
	case VK_CAPITAL://
		{
		} 
	break;
	case VK_SCROLL://
		{
		}
	break;
	default : 
			msg1.Format("Den aktiveret tastekode var : %d. Denne tast har ikke nogen funktion",nChar);
	}
	((CMainFrame*)AfxGetMainWnd())->m_wndStatusBar.SetPaneText(0,msg1);	
	CScrollView:

nKeyDown(nChar, nRepCnt, nFlags);
}
void CMatildeView:

nKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
		if(nChar==VK_SHIFT)
		bShift=0;
	CScrollView:

nKeyUp(nChar, nRepCnt, nFlags);
}
Håber du kan bruges den til noget
Janus[Redigeret d. 18/11-02 19:23:39 af Janus S. Andersen]