真爱无限的知识驿站

学习积累技术经验,提升自身能力

c++中多线程的简单使用

code:

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
BOOL isCancel=FALSE;
HWND hwnd1;
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }
    return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
hwnd1=hwnd;
    return TRUE;
}
DWORD WINAPI ThreadFun(LPVOID Lpparam)//要运行的耗时操作,如果要用 Lpparam 需要显式转换
{
SetDlgItemText(hwnd1,IDC_EDIT1,"正在连接服务器…");
Sleep(4000);
if(isCancel==TRUE)
{
SetDlgItemText(hwnd1,IDC_EDIT1,"登陆已取消!");
return -1;
}
SetDlgItemText(hwnd1,IDC_EDIT1,"正在验证密码…");
Sleep(4000);
if(isCancel==TRUE)
{
SetDlgItemText(hwnd1,IDC_EDIT1,"登陆已取消!");
return -1;
}
SetDlgItemText(hwnd1,IDC_EDIT1,"验证通过!");
return 0;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
{
isCancel=FALSE;
CreateThread(NULL,0,ThreadFun,0,0,0);//新的线程运行函数,第4个参数可以给函数传参数值
}
        break;
case IDC_btnCancel:
{
isCancel=TRUE;
}
break;;
        default:
break;
    }
}
void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}


c++几种常用的界面控件的使用1

code:

//c++文本输入框的操作:
bool isnumber(char *str1,char *str2)  //判断它是不是输入的数字
{
 int i,flag=1;
   for(i=0;i<strlen(str1);i++)
   {
    if ( (str1[i]<'0' || str1[i]>'9')&&str1[i]!='.'&&str1[i]!='.')   //右边小键盘上的和中间键盘上的点它不认为是相同的
    {
     flag=0;return FALSE;
    }
   }
   if (flag==1)
   {
    for(i=0;i<strlen(str2);i++)
     if ( (str2[i]<'0' || str2[i]>'9') &&str2[i]!='.'&&str1[i]!='.')   
     {
      flag=1;return FALSE;
     }
   }
   return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
 case IDC_OK:
  {
   TCHAR str1[256],str2[256];
   GetDlgItemText(hwnd,IDC_EDIT1,str1,sizeof(str1));  //得到输入的字符串
   GetDlgItemText(hwnd,IDC_EDIT2,str2,sizeof(str2));//得到输入的字符串
   if (isnumber(str1,str2))
   {
   double i1=atof(str1);
   double i2=atof(str2);
   double i3;
   char str[256];
   HWND hwndcombo1 = GetDlgItem(hwnd,IDC_COMBO1);   //通过这个得到选择框的句柄
   int cursel=ComboBox_GetCurSel(hwndcombo1);  // 通过句柄得到选择了当前编号值
// 0 1 2 3分别为 + - * /  的编号值
 //  ComboBox_GetLBText(hwndcombo1,cursel,str);  // 通过编号值得到字符串值,放到str 里面,这里只有几个选项,直接用编号值判断就行
   switch(cursel)
   {
   case 0:
    i3=i1+i2;
    break;
   case 1:
    i3=i1-i2;
    break;
   case 2:
    i3=i1*i2;
    break;
   case 3:
    i3=i1/i2;
    break;
   }
   TCHAR str3[256];
   sprintf(str3,"%lf",i3);
   SetDlgItemText(hwnd,IDC_EDIT3,str3);
   }
   else
    SetDlgItemText(hwnd,IDC_EDIT3,"请输入数字");
  }
        break;
 default:
  break;
    }
}
//c++下拉框的操作。
case IDC_BUTTONADD:  //添加
   {
    TCHAR STR[256];
    GetDlgItemText(hwnd,IDC_EDITADD,STR,sizeof(STR)); // 得到添加框内的字符串
    if (STR!=NULL)
    {
    HWND COM1=GetDlgItem(hwnd,IDC_COMBO1);  // 组合框句柄
    ComboBox_AddString(COM1,STR);         //  向里面加入字符串
    SetDlgItemText(hwnd,IDC_EDITADD,NULL);   //  将添加框清空
    MessageBox(hwnd,"添加成功!","提示",MB_OK); 
    }
   }
        break;
   case IDC_BUTTONDEL: // 删除
    {
    HWND COM1=GetDlgItem(hwnd,IDC_COMBO1); 
    int cur=ComboBox_GetCurSel(COM1);    //  得到当前选择的项
    if (CB_ERR==cur)                   //  如果没有选择东西
    {
     MessageBox(hwnd,"没有数据被选择","错误",MB_OK|MB_ICONERROR);
    }
    ComboBox_DeleteString(COM1,cur);
    }
    break;
  case IDC_BUTTONSEARCH: // 查找
   {
    TCHAR STRS[256];
    GetDlgItemText(hwnd,IDC_EDITSEARCH,STRS,sizeof(STRS)); // 得到查找的字符串
    HWND EDITS= GetDlgItem(hwnd,IDC_COMBO1);       
    bool bfind=FALSE;
    int i=0,icount=ComboBox_GetCount(EDITS),ifind;      //   得到组合框中的数据有多少条
    for(;i<icount;i++)                             // 逐条搜索
    {
     TCHAR strte[256];
     ComboBox_GetLBText(EDITS,i,strte);       // 得到每条数据的字符串
     if (strcmp(strte,STRS)==0)            //  比较
     {
      bfind=true; ifind=i;break;
     }
    }
    if (bfind)         // 找到才提示,并将组合框中选中项设为找到的值
    {
     ComboBox_SetCurSel(EDITS,ifind);
     MessageBox(hwnd,TEXT("找到了"),TEXT("结果"),MB_OK);
    }
   }
   break;
//C++ 中列表框控件的使用():
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
        case IDC_OK:
{
MessageBox(hwnd,TEXT("adsdad"),TEXT("问好"),MB_OK);
}
break;
case IDC_btnAdd:
{
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)"aaa");
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)"bbb");
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)"ccc");
SendDlgItemMessage(hwnd,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)"ddd");
}
break;
case IDC_LIST1://IDC_LIST1的事件
{
if(LBN_DBLCLK==codeNotify)//双击事件
{
int index=SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETCURSEL,0,0);
TCHAR buff[255];
SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETTEXT,index,(LPARAM)buff);
MessageBox(hwnd,buff,"提示",MB_OK);
}
else if(LBN_SELCHANGE==codeNotify)//选项改变事件
{
int index=SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETCURSEL,0,0);
TCHAR buff[255];
SendDlgItemMessage(hwnd,IDC_LIST1,LB_GETTEXT,index,(LPARAM)buff);
MessageBox(hwnd,buff,"提示",MB_OK);
}
}
break;
        default:
break;
    }
}
//C++MFC中列表框控件的使用():
 CListBox *listbox2= (CListBox*)GetDlgItem(IDC_LIST2); //获得列表框的指针
 listbox2->AddString("菠萝");       //为列表框添加列表项
 listbox2->AddString("苹果");       
 listbox2->AddString("桃子");
 listbox2->AddString("西瓜");
 listbox2->AddString("香蕉");
 CListBox *listbox3= (CListBox*)GetDlgItem(IDC_LIST3); //获得列表框的指针
 listbox3->AddString("格尺");       //为列表框添加列表项
 listbox3->AddString("橡皮");
 listbox3->AddString("胶带");
 listbox3->AddString("铅笔");
//【加在 BOOL CListTestDlg::OnInitDialog()里的】
void CListTestDlg::OnButton1()
{
 CListBox *listbox1= (CListBox*) GetDlgItem(IDC_LIST1); //得到列表控件的指针
 listbox1->AddString("北京");       //向列表中添加内容
 listbox1->AddString("长春");
 listbox1->AddString("上海");
 listbox1->AddString("南京");
}
void CListTestDlg::OnButton2()
{
 CListBox *listbox2=(CListBox*)GetDlgItem(IDC_LIST2); //得到列表控件的指针
 listbox2->SelectString(0,"桃子");      //查找列表中“桃子”一项
}
void CListTestDlg::OnSelchangeList3()
{
 CListBox *listbox3= (CListBox*)GetDlgItem(IDC_LIST3); //得到列表框的指针
 int select;       
 select=listbox3->GetCurSel();       //得到当前列表框中选项的索引
 CString str;
 listbox3->GetText(select,str);       //得到列表索引指向的文本内容
 CButton *button3= (CButton*)GetDlgItem(IDC_BUTTON3); //得到按钮指针
 button3->SetWindowText(str);       //设置按钮文本
}
void CListTestDlg::OnButton4()
{
 CListBox *listbox4= (CListBox*) GetDlgItem(IDC_LIST4); //得到列表控件指针
 listbox4->Dir(DDL_DIRECTORY,"c://*.*");     //向列表框中添加C盘驱动器文件名列表
}
//C++MFC中按钮控件的使用:
CButton *button1=(CButton*)GetDlgItem(IDC_BUTTON1);   //得到按钮的指针
 button1->ModifyStyle(0,BS_ICON);       //设置按钮风格为图表显示
 button1->SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1));   //按钮以图标显示
 CButton *button3=(CButton*)GetDlgItem(IDC_BUTTON5);  
 button3->SetButtonStyle(BS_RADIOBUTTON);     //设置按钮风格为单选按钮
//【上面的是放在 BOOL CButtonTestDlg::OnInitDialog() 中的】
void CButtonTestDlg::OnButton2()
{
 SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));  //设置光标
}
void CButtonTestDlg::OnButton3()
{
 CButton *button5=(CButton*)GetDlgItem(IDC_BUTTON5);  //得到按钮指针
 button5->SetCheck(true);        //选中单选按钮
}
void CButtonTestDlg::OnButton4()
{
 CButton *button5=(CButton*)GetDlgItem(IDC_BUTTON5);  //得到按钮指针
 button5->SetCheck(false);        //取消单选按钮的选中
}
//C++MFC中编辑框的使用:
//四个编辑框,四个按钮,不同功能
void CEditTestDlg::OnButton1()
{
 CEdit* edit1= (CEdit*)GetDlgItem(IDC_EDIT1); //得到编辑框的指针
 edit1->SetWindowText("it科技");    //设置编辑框中的内容
}
void CEditTestDlg::OnButton2()
{
 CEdit* edit2= (CEdit*)GetDlgItem(IDC_EDIT2); //得到编辑框的指针
 edit2->Undo();         //取消上一次的操作
}
void CEditTestDlg::OnButton3()
{
 CEdit* edit3= (CEdit*)GetDlgItem(IDC_EDIT3); //得到编辑框的指针
 edit3->SetPasswordChar('*');     //设置密码输入字符
}
void CEditTestDlg::OnButton4()
{
 CEdit* edit4= (CEdit*)GetDlgItem(IDC_EDIT4); 
 edit4->ModifyStyle(0,ES_NUMBER); //第一个参数代表要移除的窗口风格,第二个是要添加的窗口风格(只能输入数字)
}


微信小程序开发-用户登录流程学习

一、简介:

微信小程序登录这个概念有些广,有调用官方登录接口和调用开发者第三方服务器登录两种。为什么要登录?因为小程序用户从微信打开时,就已经登录,但是登录后,对于开发者来说还是未登录状态,没有一个唯一固定的标识,无法保存用户的信息,用户第二次进入小程序不能保持上次登录时的数据、状态。

关于登录流程,我这边从网上拿的一张图,虽然不是很认同里面的说法,但流程大致如此:

微信小程序开发-框架学习(1)

官网文档:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/MINA.html


一、简介

.Net消息队列的使用-MSMQ

.Net使用消息队列,借助windows组件来存储要完成的一系列任务,不用程序使用同一个队列,方便不同程序之间的数据共享和协作……

以本人经验,这个在某个方面类似于session(当然还有很多方面不同),相同之处:session可以把信息存储在aspnet_state服务中,网站重新编译或者重新启动网站,session不会丢失(session超时是正常情况,这种情况除外)。

业余初学php经验1


学习网站:http://www.w3school.com.cn/PHP/index.asp

C# DataGrid 控件在winform里显示行号

code:

        #region 行绘制事件 ,为DataGridView每行写上序号
        /// <summary>
        /// 行绘制事件 ,为DataGridView每行写上序号
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, this.dataGridView.RowHeadersWidth - 4, e.RowBounds.Height);
            TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
            this.dataGridView.RowHeadersDefaultCellStyle.Font,
            rectangle, this.dataGridView.RowHeadersDefaultCellStyle.ForeColor,
            TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }
        #endregion


robot Framework(02)常用语法、xpath的定位01

    刚学robot Framework不久,语法的话如果没用过某个关键字比较懵,一般用过一次就会了。感觉最重要的就是xpath定位元素了,其他的我觉得查查语法就行,就是xpath有点难,就算语法全背熟了,有些复杂的页面场景还是很难定位元素。

    最的学习过的几个语法和几种定位

1、打开浏览器,并打开相应的网址

Open Browser http://example.com Chrome

开发网站后得出的asp.Net网站优化总结

asp.Net网站优化总结:


.Net循环链表解决魔术师的秘密

在一次晚会上,一位魔术师掏出一叠扑克牌,取出其中13张黑桃,预先洗好后,把牌面朝下,对观众说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念一,将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌上,继续数手里的余牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3,这样依次将13张牌翻出,准确无误。现在的问题是,魔术师手中牌的原始顺序是怎样的?

<< < 31 32 33 34 35 36 37 38 39 40 > >>

Powered By Z-BlogPHP 1.7.3

Copyright 2024-2027 pukuimin Rights Reserved.
粤ICP备17100155号