SDK数据库系统+radiobutton+listview

来源:互联网 发布:知乐作品合集网盘下载 编辑:程序博客网 时间:2024/04/30 10:18

这几天老师要我们完成一个数据库系统的综合实验,趁机把ODBC 的知识给补补,同时也把各种控件实现一下,主要有radiobutton,listview。这篇文章存在许多不足,希望各位多多指教。微笑

编译界面如下:


数据库连接

在数据库中建立一个表,来存储用户信息,用ODBC连接数据库,在通过SQL 语言实现查找表中是否有用户信息,如果有及登录成功,反之失败。在此过程中也遇到了一些麻烦,wsprintf(sql,"update   name1  set name1.Fsex='%s' ,name1.Fage=%s,name1.Fname='%s'",str1,str2,str3,str);     result =SQLPrepare(hstmt(SQLCHAR*)sql,SQL_NTS);在实现上面语句时由于没有加name这个表名(由于在数据库中不止一个表,不同的表中都有Fname,所以必须用,name1.Fage才能实现对数据库的更新),同时在定义的char类型前必须加上分号。所以在细节方面,要多加注意,脚踏实地的做好一件事。

radiobutton

在实现radiobutton的时候,需要自己封装一个函数(其实MCF都是由微软封装起来的函数)一下有一个封装函数 GetCheckRadioButton(HWND hwnd,int firstId,int lastId),他的作用是判断radiobutton是否选中,如果选中即返回对应radiobutton的值,函数封装如下:

int GetCheckRadioButton(HWND hwnd,int firstId,int lastId)
{
int i;
for(i=firstId;i<=lastId;i++)
{
UINT iChecked=IsDlgButtonChecked(hwnd,i);
if(iChecked==BST_CHECKED)
{
    return i;
}
}
return -1;
}

同时实现radiobutton不能仅仅依靠GetCheckRadioButton(HWND hwnd,int firstId,int lastId)函数,还要用一下函数实现其功能。

      case IDC_RADIO1:
      case IDC_RADIO2:
      CheckRadioButton(hwnd, IDC_RADIO1, IDC_RADIO2,id);
       case IDC_OK:
            {
                int id;
            id=GetCheckRadioButton(hwnd,IDC_RADIO1,IDC_RADIO2);
            if(id==IDC_RADIO1)
            {

             }

ListView


实现ListView之前必须做好准备工作,要加载其头文件#include<CommCtrl.h>,以及其对应的库comctl32.lib,首先在对话框DLG的初始化时加载其代码


BOOL loginDlg2_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    HWND hwnd1 = GetDlgItem(hwnd,IDC_LIST1);//获得句柄
        DWORD   dwExStyle   =
                        LVS_EX_CHECKBOXES|//设置listView可复选
                    LVS_EX_FLATSB|//设置滚动条
                        LVS_EX_FULLROWSELECT |  //设置可选整行
                        LVS_EX_GRIDLINES |  //listView的item的每个栏目之间添加分割线
                        LVS_EX_HEADERDRAGDROP |//允许litview的目录通过拖放重排序
//                        LVS_EX_ONECLICKACTIVATE| //当用户点击item时,向parent window发生消息,而且当光标从item上移过时,item背景发生变化
//                        LVS_EX_TWOCLICKACTIVATE| //当用户双击item时,向parent window发生消息,而且当光标从item上移过时,item背景发生变化,但当添加此参数,item项不能编辑
//                        LVS_EX_TRACKSELECT |//当光标在某个项上停留一段时间就选中此项
//                        LVS_EX_UNDERLINECOLD |//此参数只要设置了LVS_EX_ONECLICKACTIVATE才起作用,每项下面都有下划线,当鼠标移到某项时下划线去掉,并且字体颜色变化
//                        LVS_EX_UNDERLINEHOT | //此参数只要设置了LVS_EX_ONECLICKACTIVATE才起作用,与LVS_EX_UNDERLINECOLD相反,当鼠标移到某项时,出现下划线                        
                        LVS_EDITLABELS    
//                        LVS_EX_REGIONAL|    //仅当listview的style为LVS_ICON 时才起作用
//                         LVS_EX_INFOTIP |  //仅当listview的style为LVS_ICON 时才起作用
//                        LVS_EX_MULTIWORKAREAS | // 未知
//                        LVS_EX_SUBITEMIMAGES|//未知
                        ;
//    SendMessage(hwndListView,LVM_SETEXTENDEDLISTVIEWSTYLE,0,dwExStyle);
    //或者用下面的语句
    ListView_SetExtendedListViewStyle(hwnd1,dwExStyle);//设置Listview的风格

    ListView_SetTextBkColor(hwnd1,RGB(230,240,250));//设置列表框背景色。
    ListView_SetTextColor(hwnd1,RGB(12,12,12));//字体颜色。

//SendDlgItemMessage(hwnd, IDC_LIST1, LVM_INSERTITEM, 0, (LPARAM)&lvItem);

LVCOLUMNW lvc;
lvc.mask = LVCF_TEXT| LVCF_WIDTH |LVCF_SUBITEM;
lvc.cchTextMax =20;//字宽。
lvc.pszText = TEXT("学号");
lvc.cx = 100 ;
SendMessage(hwnd1, LVM_INSERTCOLUMN,0,(LPARAM)&lvc);
lvc.pszText = TEXT("姓名");
lvc.cx = 100;
SendMessage(hwnd1, LVM_INSERTCOLUMN,1,(LPARAM)&lvc);
lvc.pszText = TEXT("性别");
lvc.cx = 100;
SendMessage(hwnd1, LVM_INSERTCOLUMN,2,(LPARAM)&lvc);
lvc.pszText = TEXT("年龄");
lvc.cx = 100;
SendMessage(hwnd1, LVM_INSERTCOLUMN,3,(LPARAM)&lvc);
lvc.pszText = TEXT("系别");
lvc.cx = 100;
SendMessage(hwnd1, LVM_INSERTCOLUMN,4,(LPARAM)&lvc);
LV_ITEM lvi;
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_GETITEMCOUNT,0,0);
lvi.mask = LVIF_TEXT;
lvi.iItem = 0;
lvi.iSubItem = 0;
lvi.pszText =TEXT("101");
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_INSERTITEM,0,(LPARAM)&lvi);

lvi.iSubItem =1;
lvi.pszText = TEXT("欧阳");
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_SETITEM,0,(LPARAM)&lvi);
lvi.iSubItem =2;
lvi.pszText = TEXT("男");
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_SETITEM,0,(LPARAM)&lvi);
lvi.iSubItem =3;
lvi.pszText = TEXT("21");
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_SETITEM,0,(LPARAM)&lvi);
lvi.iSubItem =4;
lvi.pszText = TEXT("计算机");
SendDlgItemMessage(hwnd,IDC_LIST1,LVM_SETITEM,0,(LPARAM)&lvi);


    return TRUE;
}

在此过程中我遇到了许多问题,例如把数据插入Listvew时,只能插入第一行和第一列,错误就在我们没注意Listvew的风格,在添加行与列时,比较不同,首先,SendDlgItemMessage(hwnd,IDC_LIST1,LVM_GETITEMCOUNT,0,0);要注意LVM_GETITEMCOUNT这消息,由于添加行与列时,发送的消息不一样。再次注意:SendDlgItemMessage(hwndListView,IDC_LIST1,LVM_INSERTITEM,0,(LPARAM)&lvi);与SendDlgItemMessage(hwndListView,IDC_LIST1,LVM_SETITEM,0,(LPARAM)&lvi);*/的不同之处。

在期间也遇到了结构体的问题,如定义列时,有的用LV-COLUMN,有的用LVCOLUMNW,这要适情况而定,如果不行直接把结构体定义在自己的loginDlg2.h中。



原创粉丝点击