###运行后虽然有界面出现,但是输入了用户名和密码后就卡住了一会,然后退出了,messagebox也没有显示,求大佬点拨,下面是代码:
#include <windows.h>
#include "resource.h"
//.......
//资源
BOOL REGISTEWIN(HINSTANCE hInstance,LPSTR lpClassName, WNDPROC wndProc);
void SHOWWND(HWND hwnd);
void MESSAGE();
void Link();
LRESULT CALLBACK MYPROC(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
LRESULT CALLBACK SCREEAN1PROC(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
LRESULT CALLBACK DialogProc1(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
BOOL Check(SQLHSTMT hStmt);
HWND hwndup;
HWND hwnd;
RETCODE retcode;
HINSTANCE hInstance;
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
char users[255]={0};
char password[255]={0};
//winmain主程序
int WinMain(HINSTANCE hInstance,HINSTANCE hinstance,LPSTR lpCmdLine,int nShowCmd){
char* name = "name";
char* screen1 = "screen1";
//创建对话框,并判断对话框是否注册成功
HWND hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG2),GetDesktopWindow(),(DLGPROC)DialogProc1);
if(!hdlg) MessageBox(hwnd,"error","error",MB_OK);
SHOWWND(hdlg);
//创建管理界面
hwndup = CreateWindow(screen1,TEXT("图书管理界面"),WS_OVERLAPPEDWINDOW,500,100,500,700,NULL,LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1)),hInstance,NULL) ;
MESSAGE();
return 0;
}
//DialogProc1函数
LRESULT CALLBACK DialogProc1(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam){
switch (msg)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
{
switch (LOWORD(wparam)) {
case IDOK:
{
HWND h1=NULL;
HWND h2=NULL;
h1=GetDlgItem(hdlg,0x00009c40) ;
h2=GetDlgItem(hdlg,0x00009c41) ;
if(h1==NULL&&h2==NULL)
printf("GetDlgItem fail!");
//获得user和password
SendMessage(h1,WM_GETTEXT,255,(LPARAM)users);
SendMessage(h2,WM_GETTEXT,255,(LPARAM)password);
printf("%s %s\n",users,password);
//
//
//就是这里,,,,想通过数据库查找user和password
//
//
if(Check(hdlg)==TRUE)
MessageBox(hdlg,"error","账户或密码不正确",MB_OK);
DestroyWindow(hdlg);
hdlg = NULL;
hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)DialogProc1);
ShowWindow(hdlg,SW_SHOW);
}
break;
case IDCANCEL:
{
//点击取消按钮关闭对话框,最后关闭窗口
EndDialog(hdlg, IDCANCEL);
}
break;
}
}
break;
case WM_SYSCOMMAND:
{
if (wparam == SC_CLOSE) {
EndDialog(hdlg,TRUE);
}
}
break;
}
return (INT_PTR)FALSE;
}
//检查user和password函数
BOOL Check(SQLHSTMT hStmt)
{
Link();
char * person1 = "select *from Login where users='";
const char * person2 = "' and password=";
strcat(person1,users);
strcat(person1,person2);
strcat(person1,password);
SQLRETURN ret = SQLExecDirect(hStmt,(SQLCHAR*)person1,strlen(person1));
if (ret == SQL_SUCCESS) return TRUE;
else return FALSE;
}
void MESSAGE(){
MSG msg = {0};
while(GetMessage(&msg,NULL,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);//分发消息,将消息分发给回调函数,回调函数callback处理完后,返回给dispatchmessage函数,再继续进行消息循环
}
}
void Link(){
//
UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "db_mrbm",//数据源名称
szUID[MAXNAME] = "sa",
szAuthStr[MAXNAME] = "0922";
//1.连接数据源
//1.环境句柄
retcode = SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);
retcode = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
//2.连接句柄
retcode = SQLAllocHandle(SQL_HANDLE_DBC,henv, &hdbc1);
retcode = SQLConnect(hdbc1, szDSN, 13, szUID, 2, szAuthStr,4);
//判断连接是否成功
if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO)){
MessageBox(hwnd,"连接错误","error",MB_OK);
}else{printf("连接!/n");}
//
}