用鼠标,对于多个重叠的物体进行选取,照书上的说法,应该使用Z值来判断哪个物体在可视空间中最靠近用户,而进行确定选取。
可是现在还是不大理解,书上没有相应的例子加以说明。请问谁能够提供相应的例子出来学习吗?谢谢了!!
可是现在还是不大理解,书上没有相应的例子加以说明。请问谁能够提供相应的例子出来学习吗?谢谢了!!
解决方案 »
- 要是中间我要把位图加载到别的Hdc里用OldN还是bmpNor的位图对象???
- 窗体启动时,链接数据库失败,而启动之后再链接就OK,为啥?
- 控件实时改变模型的参数
- windows7 设置桌面背景图片失败(图片文件名是长路径)259个中文字符
- 关于CSocket连接问题?
- 485串连两个外设(比如:读卡器),会不会出现两台外设同时主动向串口发送数据而造成串口接收的外设协议数据串出现交叉问题?
- oracle里面的一段脚本怎么嵌入vc里面去?
- 怎么让无模式对话框不“挡住”主界面?
- 多文档下如何增加一个视图
- 最菜的问题:请问LPCTSTR是什么?
- 请教:8位bmp的位图数据的取值范围是从(0--255)还是(-128--127)??
- 模态窗口调用问题
GLuint WINAPI ProcessSelection(CMyDoc* m_pDoc, GLuint hits, GLuint buffer[], bool bCutTree)
{
unsigned int i;
CString str, strCommand, strDisplay;
GLuint names, *ptr, id, idd;
int z1, z2, zmin;
RECT ChildRect;
ChildRect.left = 100;
ChildRect.right = 400;
ChildRect.top = 100;
ChildRect.bottom = 300;
zmin = -1;
ptr = (GLuint*)buffer;
for(i=0;i<hits;i++)
{
names = *ptr;
ptr++;
z1 = *ptr;
ptr++;
z2 = *ptr;
ptr++;
id = *ptr;
ptr++;
if(id==0)continue;
if(zmin==-1)
{
zmin = z2;
idd = id;
}
else if(z2<zmin)
{
zmin = z2;
idd = id;
}
}
if(bCutTree)return idd;
if(idd<10)
str.Format("0%u", idd);
else
str.Format("%u", idd);
CString strPath;
LPTSTR pszPath;
CString strCommandLine;
LPTSTR pszCommandLine;
STARTUPINFO startup;
PROCESS_INFORMATION process;
BOOL tSuccess;
strPath += _T( "hpvfp6vr.exe" );
memset( &startup, 0, sizeof( startup ) );
startup.cb = sizeof( startup );
startup.dwFlags = STARTF_USESHOWWINDOW|STARTF_USEPOSITION;
startup.wShowWindow = SW_HIDE;
startup.dwX = 400;
startup.dwY = 100;
memset( &process, 0, sizeof( process ) ); strCommandLine.Format( "\"%s\" %s %s", LPCTSTR( strPath ), "2", str);
pszCommandLine = strCommandLine.GetBuffer( 0 );
tSuccess = CreateProcess( NULL, pszCommandLine, NULL, NULL, false,
0, NULL, NULL, &startup, &process );
strCommandLine.ReleaseBuffer();
if( tSuccess )
{
// Close the handles that CreateProcess returned so we don't leak
// kernel resources.
ASSERT( process.hProcess != NULL );
CloseHandle( process.hProcess );
ASSERT( process.hThread != NULL );
CloseHandle( process.hThread );
}
else
{
strDisplay = "hpvfp6vr.exe ÔËÐÐÎļþûÓз¢ÏÖ£¬Çë¼ì²é·¾¶ÊÇ·ñÕýÈ·£¬ÎļþÃûÊÇ·ñÓÐЧ£¡";
::MessageBox(NULL, strDisplay, "´íÎó£º", MB_OK|MB_ICONQUESTION|MB_SETFOREGROUND);
}/* strCommand.Format("hpvfp6vr %s %s", "2", str);
if(::WinExec(strCommand, SW_HIDE)<=31)
{
strDisplay = "hpvfp6vr.exe ÔËÐÐÎļþûÓз¢ÏÖ£¬Çë¼ì²é·¾¶ÊÇ·ñÕýÈ·£¬ÎļþÃûÊÇ·ñÓÐЧ£¡";
::MessageBox(NULL, strDisplay, "´íÎó£º", MB_OK|MB_ICONQUESTION|MB_SETFOREGROUND);
} */
return idd;
// str.Format("Â¥·¿µÄÓû§ºÅ£º%ld", idd);
// ::MessageBox(NULL, str, "Info", MB_OK | MB_ICONEXCLAMATION);
CBuildingAttriSet BuildingAttriSet(&m_pDoc->m_pCWh->m_database); // db passed via constructor BuildingAttriSet.m_strFilter.Format("id = '%u'", idd); BuildingAttriSet.m_strFilter="id=?";
str.Format("%u", idd);
BuildingAttriSet.m_idParam = str;
CAttriOperateDlg AttriOperateDlg;
// AttriRecView.OnInitialUpdate();
// AttriRecView.Create(NULL, "ÊôÐÔ²Ù×÷", WS_VISIBLE|WS_POPUP|WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN, ChildRect, NULL, 0, NULL);
// BuildingAttriSet.m_bUpdatable = true;
BuildingAttriSet.Open();
if(!BuildingAttriSet.IsEOF()) {
AttriOperateDlg.m_iUserID = atol(BuildingAttriSet.m_id);
AttriOperateDlg.m_strZIP = BuildingAttriSet.m_att01;
AttriOperateDlg.m_strProvince = BuildingAttriSet.m_att02;
AttriOperateDlg.m_strCounty = BuildingAttriSet.m_att03;
AttriOperateDlg.m_strStreet = BuildingAttriSet.m_att04;
AttriOperateDlg.m_strCourtyard = BuildingAttriSet.m_att05;
AttriOperateDlg.m_strHouseNo = BuildingAttriSet.m_att06;
AttriOperateDlg.m_iFloor = atol(BuildingAttriSet.m_att07);
AttriOperateDlg.m_strDoorPlate = BuildingAttriSet.m_att08;
AttriOperateDlg.m_strTelephone = BuildingAttriSet.m_att09;
AttriOperateDlg.m_strUser = BuildingAttriSet.m_att10;
AttriOperateDlg.m_strOwner = BuildingAttriSet.m_att11;
AttriOperateDlg.m_strOtherAuthority = BuildingAttriSet.m_att12;
AttriOperateDlg.m_dLandArea = BuildingAttriSet.m_att13;
AttriOperateDlg.m_dUserArea = atof(BuildingAttriSet.m_att14);
AttriOperateDlg.m_dBuildingArea = atof(BuildingAttriSet.m_att15);
AttriOperateDlg.m_strBuildingType = BuildingAttriSet.m_att16;
AttriOperateDlg.m_dBuildingZ = atof(BuildingAttriSet.m_att17);
AttriOperateDlg.m_dSellLandValue = atof(BuildingAttriSet.m_att18);
AttriOperateDlg.m_dTenancyLandValue = atof(BuildingAttriSet.m_att19);
AttriOperateDlg.m_dCenterX = atof(BuildingAttriSet.m_att20);
AttriOperateDlg.m_dCenterY = atof(BuildingAttriSet.m_att21);
AttriOperateDlg.m_dZ = atof(BuildingAttriSet.m_att22);
AttriOperateDlg.m_strClassCode = BuildingAttriSet.m_att23;
AttriOperateDlg.m_strName = BuildingAttriSet.m_att24;
// BuildingAttriSet.MoveNext();
}
else
return 0;
if(AttriOperateDlg.DoModal()==IDOK)
{
// BuildingAttriSet.MoveNext() BuildingAttriSet.Edit();
str.Format("%u", AttriOperateDlg.m_iUserID);
BuildingAttriSet.m_id = str;
BuildingAttriSet.m_att01 = AttriOperateDlg.m_strZIP;
BuildingAttriSet.m_att02 = AttriOperateDlg.m_strProvince;
BuildingAttriSet.m_att03 = AttriOperateDlg.m_strCounty;
BuildingAttriSet.m_att04 = AttriOperateDlg.m_strStreet;
BuildingAttriSet.m_att05 = AttriOperateDlg.m_strCourtyard;
BuildingAttriSet.m_att06 = AttriOperateDlg.m_strHouseNo;
str.Format("%u", AttriOperateDlg.m_iFloor);
BuildingAttriSet.m_att07 = str;
BuildingAttriSet.m_att08 = AttriOperateDlg.m_strDoorPlate;
BuildingAttriSet.m_att09 = AttriOperateDlg.m_strTelephone;
BuildingAttriSet.m_att10 = AttriOperateDlg.m_strUser;
BuildingAttriSet.m_att11 = AttriOperateDlg.m_strOwner;
BuildingAttriSet.m_att12 = AttriOperateDlg.m_strOtherAuthority;
str.Format("%lf", AttriOperateDlg.m_dLandArea);
BuildingAttriSet.m_att13 = str;
str.Format("%lf", AttriOperateDlg.m_dUserArea);
BuildingAttriSet.m_att14 = str;
str.Format("%lf", AttriOperateDlg.m_dBuildingArea);
BuildingAttriSet.m_att15 = str;
AttriOperateDlg.m_strBuildingType = BuildingAttriSet.m_att16;
str.Format("%lf", AttriOperateDlg.m_dBuildingZ);
BuildingAttriSet.m_att17 = str;
str.Format("%lf", AttriOperateDlg.m_dSellLandValue);
BuildingAttriSet.m_att18 = str;
str.Format("%lf", AttriOperateDlg.m_dTenancyLandValue);
BuildingAttriSet.m_att19 = str;
str.Format("%lf", AttriOperateDlg.m_dCenterX);
BuildingAttriSet.m_att20 = str;
str.Format("%lf", AttriOperateDlg.m_dCenterY);
BuildingAttriSet.m_att21 = str;
str.Format("%lf", AttriOperateDlg.m_dZ);
BuildingAttriSet.m_att22 = str;
BuildingAttriSet.m_att23 = AttriOperateDlg.m_strClassCode;
BuildingAttriSet.m_att24 = AttriOperateDlg.m_strName;
if(BuildingAttriSet.CanUpdate())BuildingAttriSet.Update();
// AttriOperateDlg.UpdateData(true);
}
if(BuildingAttriSet.IsOpen())
{
BuildingAttriSet.Close();
}
return idd;
}