|

楼主 |
发表于 2015-5-22 11:34:30
|
显示全部楼层
先介绍下用到的窗口
程序初始化阶段共创建了三个窗口:WinMap, WinList, WinSetting;WinMap包含一个画图的区域和一个文本显示的区域;WinList包含一个ListView和文本显示区域;WinSetting包含几个小工具。初始化时WinMap通过BringToTop作为初始窗口。
操作:
在WinMap中,按下F1按键,调用BringToTop切换到WinList,这步没有问题,如果没通过上下按键改变WinList中ListView中的选中条目,按F1 返回WinMap也是没问题的。
问题出在:
若在WinList中通过按键改变了ListView中的选中条目后,再切换窗口就会卡死。
我自己找的出问题的函数:在WinList中通过按键 “UP”和“DOWN”改变ListView中的条目,同时在文本显示区域显示该条目各项信息,我用的函数是- /***************************************************************************************
- Function: showCurrentBoatInfo()
- Description: Show information of the boat,which has been selected in listview
- Calls:
- Called By: _cbWindowAllList()
- Table Accessed:
- Table Updated:
- Input: WM_HWIN (Handle of current dialog)
- Output: void
- Return: void
- @Attention: There are two handle in this function's statement:
- dialog's handle & listview's handle.Do no make mistake.
- ****************************************************************************************/
- void showCurrentBoatInfo(WM_HWIN hWin)
- {
- short i = 0;
- short row = 0;
- WM_HWIN hdListView = 0;
- char strBuf[10];
- int boatID = 0;
-
-
- hdListView = WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0);
- row = LISTVIEW_GetSel(hdListView);///得到ListView当前所选的行
-
- /**@brief 找到所选行的MMSI项对应的渔船,并显示渔船信息
- *
- *@details:总共三条船,根据所选行的ID项找到ID对应的船在数组中的索引
- */
- for(i=0;i<3;i++)
- {
- LISTVIEW_GetItemText(WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0),2,row,strBuf,10);
- boatID = strtoi(strBuf);///把所选行的ID项的文本转换为整数
- if(test[i].user_id == boatID)///根据ID找到对应的船的索引
- {
- row = i;
- break;
- }
- ///显示该船的各项信息
- ///将id转化成字符转显示
- ttoi(test[row].user_id,strBuf);
- TEXT_SetText(WM_GetDialogItem(hWin,TEXT_ID_MMSI),strBuf);
- ///将纬度转化为字符串显示
- lol_to_c(test[row].latitude,strBuf);
- TEXT_SetText(WM_GetDialogItem(hWin,TEXT_ID_LATITUDE),strBuf);
- ///将经度转化为字符串显示
- lol_to_c(test[row].longitude,strBuf);
- TEXT_SetText(WM_GetDialogItem(hWin,TEXT_ID_LONGITUDE),strBuf);
-
- ttoi(test[row].SOG,strBuf);
- TEXT_SetText(WM_GetDialogItem(hWin,TEXT_ID_SOG),strBuf);
-
- ttoi(test[row].true_heading,strBuf);
- TEXT_SetText(WM_GetDialogItem(hWin,TEXT_ID_HEADING),strBuf);
- }
复制代码 在捕捉到"UP" 或者"DOWN"后先将ListView的条目上移或下移一行,然后调用上面这个函数。如果我在“UP”和“DOWN”的处理语句里不调用这个函数的话,以上描述的问题则不会出现,当然我要显示船的信息的功能也没有了。 |
|