在vc里面怎么拉入一个table 边框

怎么把datatable中的一个字段的值取出来?-.NET技术/ASP.NET-asp.net-电脑编程网怎么把datatable中的一个字段的值取出来?-.NET技术/ASP.NET作者:sasuketest 和相关&&我把数据存在table中,然后想取出 UserName那一个字段的值,怎么取?当初存的时候是这么写的&DataRow dr = dt.NewRow();&dr[&UserName&] =Convert.ToString( sdr[&UserName&]);C# code
string UserName=this.txtName.Text.Trim();
DataTable dt = new DataTable();
dt = UserManage.UserInfo(UserName);
if (这里怎么写== UserName)
------回答---------------其他回答(30分)---------
[Quote=引用 6 楼 wuyq11 的回复:]C# code
if(dt.Row.Count&0)
{
foreach(DataRow dr in dt.Rows)
if(dr[&UserName&].ToString().Equals(UserName))
}
}
[/Quote]正解
相关资料:|||||||怎么把datatable中的一个字段的值取出来?-.NET技术/ASP.NET来源网络,如有侵权请告知,即处理!编程Tags:                &                    IE信息设定: HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache1、浮点数格式:a、浮点数的范围:-2(2m-1)*(1-2-n)2、帮助文档的制作每一节的标题注脚:$每一节的跳转命(不能是中文):#每一节的关键字索引:K节序号:+跳转文本在RTF文件中是带双下划线的文本3、Dumpbin.exe:用于检查COFF目标文件,标准COFF目标库文件,可执行文件,和动态连接库文件4、Q:ZIP与RAR之类密码能否用SOFTICE或TRW动态跟踪破解?——《看雪论坛》A:不能,WinZip和WinRAR是通过与CRC结合的方式进行加密,它们在解压的时候会不管3721先把带上用户输入的密码的CRC放进解压流程中,先解出来再说,最后才进行原始的CRC判定,如果最后得到的CRC与原来的不一样,那就是解压失败。因为CRC是不可逆推的,所以也没办法得到原始的密码,同时也因为把对比的过程放在了最后,所以才没办法用SoftICE等工具进行破解,只能穷举(目前来说)。5、Q:为什么在WinNT/2000/XP系统,bpx hmemcpy断点无效?A:hmemcpy是Win9x系统内部的一个函数,俗称万能断点,但在一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。它的操作很简单,只是将内存中的一块数据拷贝到另一个地方,Win9x系统里很频繁地调用它处理数据。在Win NT/2K系统上相关的函数是memcpy,但在Win NT/2K上不同于Windows 9x上,很少再调用memcpy来处理数据了,用此函数设断基本上什么也拦不住。6、Q:为何同一函数有几种形式,如MessageBoxA(W)?A:MessageBoxA(W)是MessageBoxA,MessageBoxW两种形式缩写,Windows函数是区分字符集的:A表示ANSI,W表示Wide,即Unicode (Wide character-set),前者就是通常使用的单字节方式,而后者是双字节方式,方便处理双字节字符。Win98基本是使用ANSI字符串来进行内部操作的,但它仍可处理少数Unicode字串符函数,如MessageBoxW、MessageBoxExW等。而Win2000/XP所有核心函数都是Unicode字串符。7、Q:为什么SoftICE或TRW再运行一些软件时会中断跳出?A:用命令FAULTS off关闭错误跟踪功能。8、Q:F11与F12区别?A:F11对应的命令是:,假如你目前正中断在程序中,下这个指令会在堆栈的返回地址设个暂时断点并执行到此断点。F12对应的命令是:P RET 。SoftICE或TRW将一直单步执行直到它找到一条返回语句(RET、RETF),也就是说让SoftICE一直执行代码,直到出现 RET (XXXX) 命令,再跳出来拦截,这时,当前 IP(EIP) 会是停在 RET (XXXX) 后的某一条语句上,通常是在某一个CALL XXXXXXXX 后面。说明:F11功能键在SoftICE中有效,在TRW中可以用pmodule命令代替F11或F12,可瞬间回到到前程序领空。9、Q:SoftICE与TRW2000的断点有什么不同?&A:在这里以G命令来解释,如对G 401000命令,大家都知道是执行到401000停下,但SoftICE认为是到当前段的401000停下(也就是说在当前应用程序领空),而TRW200却不管段址如何,只要EIP是401000便停下。 这样一般跟踪一软件只要G 401000便解决。这个功能看起来简单,却极为有用。有了这条命令,只要把当前跟踪到的EIP记下,下一次一G便到。而在SoftICE下,一般先用其Symbol Loader装载程序,先来到当前应用程序的领空,然后再G 401000才能到达指定地址处。其它断点命令,如bpx原理与此类似。10、Q:如何在对话框中加入工具条在 OnInitDialog 中加入下面代码: BOOL CYourDlg::OnInitDialog(){&&&&&& CDialog::OnInitDialog();&&&&&& // Create the toolbar. To understand the meaning of the styles used, you &&&&&& // can take a look at the MSDN for the Create function of the CToolBar class.&& &&&&&& ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_BORDER_BOTTOM);&&&&& // I have assumed that you have named your toolbar''s resource as IDR_TOOLBAR1.&&&&& // If you have given it a different name, change the line below to accomodate &&&&& // that by changing the parameter for the LoadToolBar function.& &&&&& ToolBar.LoadToolBar(IDR_TOOLBAR1);& &&&&& CRect rcClientS&&&&& CRect rcClientN&&&&& GetClientRect(rcClientStart);&&&&& // To reposition and resize the control bar&&&& RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,0, reposQuery, rcClientNow);&&&& CPoint ptOffset(rcClientNow.left - rcClientStart.left,rcClientNow.top-rcClientStart.top);&&&& CRect rcC&&&& CWnd* pwndChild = GetWindow(GW_CHILD);&&&& while (pwndChild)&&&& {&&&&&& pwndChild-&GetWindowRect(rcChild);&&&&&& ScreenToClient(rcChild);&&&&&& rcChild.OffsetRect(ptOffset);&&&&&& pwndChild-&MoveWindow(rcChild, FALSE);&&&&&& pwndChild = pwndChild-&GetNextWindow();&&&& } & CRect rcW&&&& GetWindowRect(rcWindow);&&&& rcWindow.right += rcClientStart.Width() - rcClientNow.Width();&&&& rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();&&&& MoveWindow(rcWindow, FALSE);&&&& // And position the control bars&&&& RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);& &&&& return TRUE;& // return TRUE& unless you set the focus to a control& }&Q:如何改变对话框的形状?可用下面一些函数: CreatePolygonRgnCreateRectRgnCreateRoundRectRgn 等. & CRgn m_& // Put this in your dialog''s header file. i.e. a member variable& // This Gets the size of the Dialog: This piece of code is to be placed in the& // OnInitDialog Function of your dialog.& CRect rcDialog& GetClientRect(rcDialog);& // The following code Creates the area and assigns it to your Dialog& m_rgn.CreateEllipticRgn(0, 0, rcDialog.Width(), rcDialogHeight());& SetWindowRgn(GetSafeHwnd(), (HRGN) m_rgn, TRUE);&Q:如何实现非客户区移动?可用下面二种方法// Handler for WM_LBUTTONDOWN message& void CYourDialog::OnLButtonDown(UINT nFlags, CPoint point)& {&&&& CDialog::OnLButtonDown(nFlags, point);&&&& PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));& }& // Handler for WM_NCHITTEST message& LONG CYourDialog::OnNcHitTest( UINT uParam, LONG lParam )& {& &&&& int xPos = LOWORD(lParam);&&&& int yPos = HIWORD(lParam);&&&& UINT nHitTest = CDialog::OnNcHitTest(CSize(xPos, yPos));&&&& return (nHitTest == HTCLIENT) ? HTCAPTION : nHitT& }&Q:如何使对话框初始为最小化状态?在 OnInitDialog 中加入下面代码:SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL);&Q:如何限定对话框大小范围?在 WM_SIZING中加入下面代码:void CYourDialog::OnSizing(UINT fwSide, LPRECT pRect) & {&&&& if(pRect-&right - pRect-&left &=200)&&&& pRect-&right = pRect-&left + 200;&&&& if(pRect-&bottom - pRect-&top &=200)&&&& pRect-&bottom = pRect-&top + 200;&&&& CDialog::OnSizing(fwSide, pRect);& }&Q:如何在对话框中加入状态条?定义 CStatusBar 变量:CStatusBar m_StatusB定义状态条指定状态:static UINT BASED_CODE indicators[] =& {&&&& ID_INDICATOR_CAPS,&&&& ID_INDICATOR_NUM& };在 OnInitDialog 中加入下面代码: m_StatusBar.CreateEx(this,SBT_TOOLTIPS,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,AFX_IDW_STATUS_BAR);&& // Set the indicators namely caps and nums lock status& m_StatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));& CR& GetClientRect(&rect);& m_StatusBar.SetPaneInfo(0,ID_INDICATOR_CAPS,SBPS_NORMAL,rect.Width()/2);& m_StatusBar.SetPaneInfo(1,ID_INDICATOR_NUM,SBPS_STRETCH ,rect.Width()/2);& RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,ID_INDICATOR_NUM);& m_StatusBar.GetStatusBarCtrl().SetBkColor(RGB(180,180,180));11. Microsoft Distributed Transaction Coordinator服务(MSDTC.EXE)默认监听3372TCP端口12. #pragma alloc_text( &textsection&, function1, ... )13. Unicode 字符串数据类型是C语言规范的一部分,使用下列方法来使用Unicode 字符串: l将字符串常量加上前缀L。例如,L”Some text”是一个Unicode 字符串,而”Some text”是8-bit ANSI。l使用wchar_t数据类型。DDK头文件定义了WCHAR为wchar_t,PWSTR为wchar_t*。 l使用常数UNICODE_NULL去终止Unicode 字符串,UNICODE_NULL被定义为16 bits的零。cvs服务器的安装作者:weiqiong&&&& 发表时间: 08:32pm安装cvs后服务器和客户端就都安装了,主要是需要配置服务器端:1.查看是否安装cvs(我的redhat7.3缺省是装了的)rpm -qa|grep cvs一般安装在/usr/bin/cvs,如果未安装,到下载一个最新的rpm安装即可2.建立cvs用户组,便于管理cvs用户groupadd cvs3.建立cvs组的cvsroot用户和所属的目录useradd -g cvs -G cvs -d /home/cvsroot cvsroot4.为cvsroot用户添加密码passwd cvsroot5.改变/home/cvsroot的目录属性chmod 775 /home/cvsroot6.初始化cvs源代码库,此操作生成目录/home/cvsroot/CVSROOT,其下为一些初始化文件cvs -d /home/cvsroot init7.创建可以登陆cvs服务的用户及密码,需要创建文件passwdvi /home/cvsroot/CVSROOT/passwd文件内容如下:weiqiong:xxxxxx:cvsrootchenxu:xxxxxx:cvsroot此文件的意思是weiqiong和chenxu两个用户可以登陆cvs服务器,登陆后其权限为用户cvsroot的权限注意:cvs用户和服务器用户是可以不一样的8.xxxxxx为密码,由以下文件生成:vi /home/cvsroot/passwdgen.pl文件内容:& #!/usr/bin/perlsrand (time());my $randletter = &(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))&;my $salt = sprintf (&%c%c&, eval $randletter, eval $randletter);my $plaintext =my $crypttext = crypt ($plaintext, $salt);print &${crypttext}\n&;9.如果需要密码为:some,则敲入:passwdgen.pl &some&回车即可得到加密密码,用其替换passwd文件中的xxxxxx10.加入cvs服务(我的redhath7.3缺省就有cvs服务,所以不用加)vi /etc/servicescvspserver 2401/tcp #pserver cvs servicecvspserver 2401/udp #pserver cvs service 11.cvs服务由inted来唤起,因此需要改动inetd提供的服务,如果你的redhat使用的是inetd 方式则在文件/etc/inetd.conf中加入如下的内容:cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/home/cvsroot pserver& 我的redhat7.3使用的是xinetd方式,所以在xinetd.d目录下添加需要启动的服务:& cd /etc/xinetd.d& vi cvspserver& 文件内容:& service cvspserver& {&&&& disable = no&&&& flags = REUSE&&&& socket_type = stream&&&& wait = no&&&& user = root&&&& server = /usr/bin/cvs&&&& server_args = -f --allow-root=/home/cvsroot pserver&&&& log_on_failure += USERID& }12.重新启动inetd或者xinetd: /etc/rc.d/init.d/xinetd restart13.检查cvspserver服务是否已经启动netstat -l |grep cvspserver应该有如下结果:tcp 0 0 *:cvspserver& *:* LISTEN14.试用:& cvs -d :pserver:weiqiong@202.204.114.37:/home/cvsroot login& 敲入命令回车后提示输入weiqiong的密码,你按照自己设置的密码输入,如果没有什么错误信息出现就是成功了(我的机器IP地址是202.204.114.37,也可以用localhost)14、ActiveX控件的调试:-这次编写的ActiveX控件是DynaGraph,用于实时显示三组动态曲线。a、如何实现控件属性的加载和保存,如VB中的ReadProperties和WriteProperties?在DoPropExchange(CPropExchange* pPX)中进行,诸如:PX_Long(pPX,&Height&,m_lHeight,250);PX_Long(pPX,&Width&,m_lWidth,380);参见MSDN/ActiveX controls:Serializingb、由于粗心,导致产生&参数无效错误&,错误如下:m_rtBound.left=GRID_EDGE_SPACE;m_rtBound.left=GRID_EDGE_SPACE;m_rtBound.right =m_rtGrid.right-GRID_EDGE_SPACE;m_rtBound.bottom=m_rtGrid.bottom-GRID_EDGE_SPACE;由于把top写成了left,导致top没有赋值,出现溢出[不在有效范围内]c、由于VC的Bug,导致在添加属性和方法时,相应的ID没有同步,从而导致很多的属性和方法的ID没有相互对应,导致&无效参数数目&错误,而且无法对其进行跟踪(因为ID错位)。方法(以DrawGraph为例):BEGIN_DISPATCH_MAP(CDynaGraphCtrl, COleControl)DISP_FUNCTION(CDynaGraphCtrl, &DrawGraph&, DrawGraph, VT_EMPTY, VTS_PI4 VTS_PI4 VTS_PI4 VTS_I2)END_DISPATCH_MAP()dispidDrawGraph = 15L,afx_msg void DrawGraph(long FAR* pPressData, long FAR* pSpeedData, long FAR* pCtrlData, short sLen);void CDynaGraphCtrl::DrawGraph(long FAR* pPressData,long FAR* pSpeedData,long FAR* pCtrlData,short sLen)属性(以BackColor为例):BEGIN_DISPATCH_MAP(CDynaGraphCtrl, COleControl)DISP_PROPERTY_EX(CDynaGraphCtrl, &BackColor&, GetBackColor, SetBackColor, VT_COLOR)END_DISPATCH_MAP()dispidBackColor = 3L,afx_msg OLE_COLOR GetBackColor();afx_msg void SetBackColor(OLE_COLOR nNewValue);OLE_COLOR CDynaGraphCtrl::GetBackColor() { }void CDynaGraphCtrl::SetBackColor(OLE_COLOR nNewValue) {}16、ODBC connect string sample:“DBQ=E:\\工程舱盖升降系统 Access Driver (*.mdb)”17、由于坐标的不一致,导致移动控件始终不是按照预期的目的在移动。即少用了一个ScreenToClient(),正确代码如下[Hatch]:GetCursorPos(&pt);ScreenToClient(&pt);if(pt.x!=m_ptLPPPosOldX.x){m_ctlLPPointer.GetWindowRect(&m_rtLPPointer);ScreenToClient(&m_rtLPPointer);m_rtLPPointer.left-=m_ptLPPPosOldX.x-pt.x;m_rtLPPointer.right-=m_ptLPPPosOldX.x-pt.x;m_ctlLPPointer.SetWindowPos(&CWnd::wndTop,m_rtLPPointer.left,m_rtLPPointer.top,m_rtLPPointer.right-m_rtLPPointer.left,m_rtLPPointer.bottom-m_rtLPPointer.top,SWP_SHOWWINDOW);m_ptLPPPosOldX=}18、VB的ActiveX中的Extender在VB中是不兼容的,所以如果要在VC中使用VB开发的控件,则不能包含Extender。4/11/0519、自绘控件的无闪烁更新,使用InvalidateControl(&m_rtBound);更新绘图区域,而不用更新没有变化的区域。[DynaGraph: DrawGraph]4/12/200520、向导中文乱码:原因尚未查证,但是可以使用Dialog替代PROPPAGE则可解决这个问题。21、在对话框中加入属性页,当对话框失去焦点后,对话框便假死:主要是因为在创建属性页时,没有将扩展属性中的WS_EX_CONTROLPARENT加上,导致对话框无法处理属性页的相关消息,而我的属性页又没有建立相应的消息处理机制,故此。下例中this是对话框[Hatch: OnInitDialog]:m_PSheet.Create(this,WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|WS_OVERLAPPED,WS_EX_OVERLAPPEDWINDOW|WS_EX_DLGMODALFRAME|WS_EX_CONTROLPARENT);22、在子对话框类中的CPropertySheet m_PSheet成员变量,初始化时执行添加属性页时,不能多次显示—隐藏子对话框:主要是因为m_Psheet对像没有执行析构,添加进去的属性页仍然存在,解决的办法是可以在创建显示之前,删掉以前的即可,如下[Hatch: OnInitDialog]:while(m_PSheet.GetPageCount()&0)m_PSheet.RemovePage(0);//删掉以前的m_PSheet.AddPage(&m_TestPage);m_PSheet.AddPage(&m_ConfigPage);m_PSheet.Create(this,WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|WS_OVERLAPPED,WS_EX_OVERLAPPEDWINDOW|WS_EX_DLGMODALFRAME|WS_EX_CONTROLPARENT);23、DC[Device Contexts(设备相关):MSDN]设备相关是一个Windows数据结构,它包含了诸如显示器或打印机等设备的绘制属性.所有的绘制调用是直接通过设备相关对象进行的,其中封装了诸如画线,形状和文本等Windows APIs.设备相关允许在Windows中独立使用.设备相关可以用来绘制屏幕,绘制打印或者绘制媒体文件.CPaintDC:CPaintDC对象封装了Windows的通用习惯,调用BeginPaint函数,然后在设备相关中进行绘制,再调用EndPaint函数.CpaintDC在构造函数中调用BeginPaint,在析构函数调用EndPaint.这简化的处理是创建CDC对象--绘制—销毁CDC对象.在框架中,许多事件是自动处理的.特别是,你的OnDraw函数是一个CpaintDC已经准备好的(通过OnPrepareDC),并且你只是简单地绘制.它通过框架进行销毁,在设备相关中在调用OnDraw函数返回是释放给Windows.CClientDC:CclientDC对象封装了只有在客户窗口区相关的设备相关.CClientDC的构造函数调用GetDC函数,它的析构函数调用ReleaseDC函数.CWindowDC:CWindowDC对象封装了响应整个窗口的设备相关,包括框架.CMetaFileDC:CMetaFileDC对象封装了绘制到一个窗口媒体文件.调用OnDraw的方式与CpaintDC相比较,你自己必须在这里面调用OnPrepareDC24、串口操作函数a.打开串口HANDLE CreateFile(LPCTSTR lpFileName,DWORD dwDesiredAccess, DWORD dwShareMode, & LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition,& DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);b.设置缓冲BOOL SetupComm( HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);c、关闭串口BOOL CloseHandle(HANDLE hObject);&& d、配置串口BOOL GetCommState( HANDLE hFile, LPDCB lpDCB );BOOL SetCommState( HANDLE hFile, LPDCB lpDCB );BOOL BuildCommDCB( LPCTSTR lpDef, LPDCB lpDCB);BOOL BuildCommDCBAndTimeouts(LPCTSTR lpDef, LPDCB lpDCB,LPCOMMTIMEOUTS lpCommTimeouts);e、串口属性BOOL GetCommProperties( HANDLE hFile, LPCOMMPROP lpCommProp);f、串口读写BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped );&& BOOL ReadFileEx(& HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPOVERLAPPED lpOverlapped,&& & LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );& BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,& LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);& BOOL WriteFileEx(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, & LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );&& g、重叠操作& BOOL GetOverlappedResult(HANDLE hFile, LPOVERLAPPED lpOverlapped,& LPDWORD lpNumberOfBytesTransferred, BOOL bWait );h、超时BOOL GetCommTimeouts( HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);BOOL SetCommTimeouts(HANDLE hFile, LPCOMMTIMEOUTS lpCommTimeouts);& i、通信状态和通信错误BOOL ClearCommError( HANDLE hFile, LPDWORD lpErrors, LPCOMSTAT lpStat);25.数据库在执行插入语句时,始终不能插入数据:4/25/2005&& 原是语句如下:INSERT INTO ExpResult(Name,ExpID,MinPress,MaxPress,AvrPress,ResultA,ResultB,ResultC,ResultD,Result, DateStart,DateStop,Reserved1,Reserved2,Reserved3) VALUES ('23_0',1,0....000000,234...000000,'',0,0,0,0.000000,'')原因:因为我在数据库中对字符串设置了默认值为NULL,二在这儿有两个'',操作就不成功,将其改为下面的格式即可:INSERT INTO ExpResult(Name,ExpID,MinPress,MaxPress,AvrPress,ResultA,ResultB,ResultC,ResultD,Result, DateStart,DateStop,Reserved1,Reserved2,Reserved3) VALUES ('23_0',1,0.......0000,'Null',0,0,0,0.0000,'Null')即不能给无效的数据进去罢了.26.使用SQL语句创建表单,关键字需要自增,使用Counter,如下:szSQL.Format(&CREATE TABLE Data200504(IDD Counter PRIMARY KEY UNIQUE NOT NULL,StepDisplace INTEGER,PPPress SINGLE,PRESSAB INTEGER,CtrlPressC INTEGER,DateTimes INTEGER)&);27.在表单中的字段名字不能用保留字,否则在执行SQL时会不成功,诸如:Date,DateTime等。28.奇耻大辱啊,因为系统所使用的ActiveX和DLL没有注册,造成编译后的文件无法正常运行,有的是悄然无声;有的出现内存访问冲突.在注册后也出现这样的问题,主要是因为注册的空降位置在system32\下,而在当前路径下仍然有一份相应的文件.还有就是非\system32下的进行注册怎么也不好使,不知到底是为啥.最后写成一个只执行一次的批处理文件来解决此问题[register.bat],内容如下:[氡气 5/10/2005]Copy G:\Share\氡气\Release\MSCOMCTL.ocx C:\WINNT\system32Copy G:\Share\氡气\Release\FM20.dll C:\WINNT\system32Copy G:\Share\氡气\Release\MSCOMM32.ocx C:\WINNT\system32Copy G:\Share\氡气\Release\MSCOMCT2.ocx C:\WINNT\system32Copy G:\Share\氡气\Release\MyPic.ocx C:\WINNT\system32regsvr32.exe /s MSCOMCTL.ocxregsvr32.exe /s FM20.dllregsvr32.exe /s MSCOMM32.ocxregsvr32.exe /s MSCOMCT2.ocxregsvr32.exe /s MyPic.ocx29.因为发行版本的程序,调试版本的控件而导致程序无法启动.[氡气]30.在多线程里面调用成员对象[ActiveX]的方法产生异常,原因未知,估计是因为变量作用域问题.[舱盖升降系统,工作线程中调用m_ctlLEDP1.SetValue(&11.22&);]解决方法:最好不要在线程里面操作有关界面的东西,而是发送消息来进行处理原因:VB开发的控件没有正常版权,在[系统信息]中看到版本和制造商为“不可用”,即为版权问题。而VC开发的是有上面的正确信息,调用一切正常。问题有待于进一步研究ACTIVEX 控件是 COM对象. 它按COM的方式运行. 对于运行在单线程公寓模型内的 COM 来说, 它是线程不安全的,不能直接将 COM 裸指针传递至其它的线程. 如果你确信要这么做,请对COM接口进行 线程调度:IMyObject*& p = ...;IStream*& pStream& = 0;HRESULT hr = CoMarshalInterThreadInterfaceInStream(__uuidof(p), p, &pStream);if(FAILED(hr)){&& ... ERROR !}DWORD dwID;HANDLE hThread = CreateThread(NULL, 0, ThreadFnc,& (void*)pStream, 0, &dwID);....DWORD WINAPI ThreadProc(LPVOID lp){&& IStream* pStream = (IStream*)&& IMyObject* pItf = NULL;&& HRESULT hr=CoGetInterfaceAndReleaseStream(pStream, __uuidof(pItf), (void**)&pItf);&& if(FAILED(hr))&&&&& // ERROR&&&&& pStream-&Release();&&&&& return 0;&& }&& // ....&& hr = pItf-&CallSomtMethod(para);&& ...&& pItf-&Release();&& return 0;}COM库是针对线程有效的,因此你需要在线程起始处AfxOleInit()或者在起始处 ::CoInitialize(NULL); 结束处 ::CoUninitialize();31.在AD采集时,始终出现前一个通道影响后一个通道,原因可能是因为没有通道建立延时[调用的DLL][ 舱盖升降系统]32.AD采集数据线不能太长,如超过1m,这样会采集不到正确的数据.[舱盖升降系统]33.DA输出时,输出信号会一直保留,直到下一次输出为止.[ 舱盖升降系统]34.对话框中的打印实例:[轴承测试,6/17/2005] void CDataMan::OnBtnPrint() {if(NULL==m_ctlDataIndex.GetFirstSelectedItemPosition()){AfxMessageBox(&你没有选中待打印的记录,不能进行打印!&);}CDC&&& CPrintDialog printDlg(FALSE);if (printDlg.DoModal()==IDCANCEL)//Get printer settings from userdc.Attach(printDlg.GetPrinterDC());//将纸张改为横向的LPDEVMODE lpDM=printDlg.GetDevMode();lpDM-&dmOrientation=DMORIENT_LANDSCAPE;lpDM-&dmFields|=DM_ORIENTATION;dc.ResetDC(lpDM);//Get and attach a printer DCdc.m_bPrinting = TRUE;&&& CString strT& // Get the application titlestrTitle.LoadString(AFX_IDS_APP_TITLE);&&& DOCINFO // Initialise print document details::ZeroMemory (&di, sizeof (DOCINFO));&&& di.cbSize = sizeof (DOCINFO);&&& di.lpszDocName = strTBOOL bPrintingOK = dc.StartDoc(&di);// Begin a new print job. Get the printing extents and //ore in the m_rectDraw field of a CPrintInfo object&&& CPrintInfo Im_nWidth =dc.GetDeviceCaps(HORZRES);m_nHeight=dc.GetDeviceCaps(VERTRES);Info.m_rectDraw.SetRect(0,0,m_nWidth,m_nHeight);m_fRatioX=(float)m_nWidth/PAGE_WIDTH;m_fRatioY=(float)m_nHeight/PAGE_HEIGHT;OnBeginPrinting(&dc,&Info);//Call your &Init printing& functionfor(UINT page = Info.GetMinPage(); page &= Info.GetMaxPage() && bPrintingOK; page++)&&& {&&&&&&& dc.StartPage();&&& // begin new page&&&&&&& Info.m_nCurPage =&&&&&&& OnPrint(&dc,&Info); //Call your &Print page& function&&&&&&& bPrintingOK = (dc.EndPage() & 0); // end page&&& }OnEndPrinting(&dc, &Info); // Call your &Clean up& function&&& if (bPrintingOK)&&&&&&& dc.EndDoc();// end a print job&&& else&&&&&&& dc.AbortDoc();// abort job.&&& dc.DeleteDC();// delete the printer DC]}void CDataMan::OnBeginPrinting(CDC *pDC, CPrintInfo *pInfo){POSITION pos=m_ctlDataIndex.GetFirstSelectedItemPosition();int nRow=m_ctlDataIndex.GetNextSelectedItem(pos);m_uaPrint.RemoveAll();do{m_uaPrint.Add(nRow);nRow=m_ctlDataIndex.GetNextSelectedItem(pos);}while(nRow&=0);m_penTable.CreatePen(PS_SOLID,1,RGB(10,10,10));m_pOldPen=pDC-&SelectObject(&m_penTable);m_RptFont.CreateFont(FONT_HEIGHT*m_fRatioX,0, 0, 0, FW_NORMAL, FALSE, FALSE, 0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH| FF_ROMAN, NULL);//因为我在表格中只使用一种字体,所以可以在这里将字体选入设备中m_pOldFont=pDC-&SelectObject(&m_RptFont);int nPage=m_uaPrint.GetSize();nPage=nPage/(TABLE_ROW_NUMBER-1);nPage+=(m_uaPrint.GetSize()%(TABLE_ROW_NUMBER-1)==0)?0:1;pInfo-&SetMinPage(1);pInfo-&SetMaxPage(nPage);}void CDataMan::OnPrint(CDC *pDC, CPrintInfo *pInfo){int nTabs[TABLE_COLUMN_NUMBER]={(COL_1+TABLE_LEFT_SPACE)*m_fRatioX,(COL_2+TABLE_LEFT_SPACE)*m_fRatioX,(COL_3+TABLE_LEFT_SPACE)*m_fRatioX,(COL_4+TABLE_LEFT_SPACE)*m_fRatioX,(COL_5+TABLE_LEFT_SPACE)*m_fRatioX,(COL_6+TABLE_LEFT_SPACE)*m_fRatioX};CString szPTEXTMETRICpDC-&GetTextMetrics(&metrics);pDC-&FillSolidRect(0,0,m_nWidth,m_nHeight,RGB(0XFF,0XFF,0XFF));//打印文字内容//////////////////////////////////////////////////szPrint.Format(&令号: %s&,m_ctlDataIndex.GetItemText(m_uaPrint.GetAt(0),2));pDC-&TextOut((PAGE_LEFT_SPACE+TABLE_LEFT_SPACE)*m_fRatioX,(PAGE_TOP_SPACE+TABLE_TOP_SPACE)*m_fRatioX,szPrint);szPrint.Format(&附件号: &);pDC-&TextOut((PAGE_LEFT_SPACE+TABLE_LEFT_SPACE)*m_fRatioX,(PAGE_TOP_SPACE+TABLE_TOP_SPACE+TABLE_ROW_HEIGHT)*m_fRatioY,szPrint);//表单标题szPrint=m_szRptTint nPosX=pInfo-&m_rectDraw.right/2-(szPrint.GetLength()*metrics.tmMaxCharWidth)/2;pDC-&TextOut(1600*m_fRatioX,(PAGE_TOP_SPACE+TABLE_TOP_SPACE)*m_fRatioY,szPrint);//列标题szPrint.Format(&\t附件名称\t轴承型号\t轴承序号\t测试时长(s)\t测试类型\t测试结果(KHz)&);pDC-&TabbedTextOut(TABLE_LEFT_POSITION*m_fRatioX,(TABLE_TOP_POSITION+TABLE_TOP_SPACE)*m_fRatioY,szPrint,sizeof(nTabs),nTabs,0);//&操作员&,&测试日期&,&轴承型号&,&轴承编号&,&测试结果&,&时间长度&,&门限电压&,&A导通&,&B导通&,&标志信息&int nIndex=0;int nR for(nRow=1;nRow&=TABLE_ROW_NUMBER-1&&nRow&=m_uaPrint.GetSize();nRow++)//打印{nIndex=m_uaPrint.GetAt(nRow-1); szPrint.Format(&\t%s\t%s\t%s\t%s\t%s\t%s&,m_ctlDataIndex.GetItemText(nIndex,3),m_ctlDataIndex.GetItemText(nIndex,4),m_ctlDataIndex.GetItemText(nIndex,5),m_ctlDataIndex.GetItemText(nIndex,7),m_ctlDataIndex.GetItemText(nIndex,8),m_ctlDataIndex.GetItemText(nIndex,9));pDC-&TabbedTextOut(TABLE_LEFT_POSITION*m_fRatioX,(TABLE_TOP_POSITION+nRow*TABLE_ROW_HEIGHT+TABLE_TOP_SPACE)*m_fRatioY,szPrint,sizeof(nTabs),nTabs,0);}m_uaPrint.RemoveAt(0,nRow&=TABLE_ROW_NUMBER?11:nRow-1);//去掉已经打印的部分szPrint.Format(&\t工作者:%s\t日期:%s&, m_ctlDataIndex.GetItemText(nIndex,0),m_ctlDataIndex.GetItemText(nIndex,1));int nRootTab[]={(COL_1+TABLE_LEFT_SPACE)*m_fRatioX,(PAGE_WIDTH-PAGE_RIGHT_SPACE-900)*m_fRatioY};pDC-&TabbedTextOut(TABLE_LEFT_POSITION*m_fRatioX,(TABLE_TOP_POSITION+TABLE_ROW_NUMBER*TABLE_ROW_HEIGHT+TABLE_TOP_SPACE)*m_fRatioY,szPrint,sizeof(nRootTab),nRootTab,0);//打印表格/////////////////////////////////////////////////////////////////////for(nRow=0;nRow&TABLE_ROW_NUMBER+1;nRow++){//打印横线pDC-&MoveTo(TABLE_LEFT_POSITION*m_fRatioX,(TABLE_TOP_POSITION+nRow*TABLE_ROW_HEIGHT)*m_fRatioY);pDC-&LineTo((PAGE_WIDTH-PAGE_RIGHT_SPACE)*m_fRatioX,(TABLE_TOP_POSITION+nRow*TABLE_ROW_HEIGHT)*m_fRatioY);}int nColPos[]={COL_1*m_fRatioX,COL_2*m_fRatioX,COL_3*m_fRatioX,COL_4*m_fRatioX,COL_5*m_fRatioX,COL_6*m_fRatioX,COL_END*m_fRatioX};for(int nCol=0;nCol&sizeof(nColPos)/sizeof(int);nCol++){//打印竖线pDC-&MoveTo(nColPos[nCol],TABLE_TOP_POSITION*m_fRatioY);pDC-&LineTo(nColPos[nCol],(TABLE_TOP_POSITION+TABLE_ROW_NUMBER*TABLE_ROW_HEIGHT)*m_fRatioY);}}void CDataMan::OnEndPrinting(CDC *pDC, CPrintInfo *pInfo){pDC-&SelectObject(m_pOldFont);pDC-&SelectObject(m_pOldPen);m_pOldFont=NULL;m_pOldPen=NULL;m_penTable.DeleteObject();m_RptFont.DeleteObject();}35.数据库的模糊匹配问题:在数据库的模糊匹配问题上,在不同地方使用的是不同的通配符,这一定的注意,要不然在一个地方测试通过了,但是在另一个地方却会出现无名的异常.在ACCESS里面的通配符为'*'(匹配多个字符)和'?'(匹配单个字符)。但是在ODBC中使用时,却是使用'%'(匹配多个字符)和&_&(匹配单个字符)。我在Hatch 中使用的是CDatabase和CRrectset,里面就应该使用&%&和&_&才能正常匹配。【 Hatch/CDataSELECT Name,MinPress,MaxPress,ResultName1,ResultName2,ResultName3,ResultName4, ResultA,ResultB,ResultC,ResultD,DateStart,Operator,ExpNo,PdtNo FROM ExpResult, ExpItem, ExpRsltInfo WHERE Name LIKE 'sd%' AND ExpID=ExpItem.IDD AND ExpNo='sd'&36.在使用CListCtrl时,如果要显示表格线条,只需要将其扩展属性中加上LVS_EX_GRIDLINES即可,可以使用GetExtendedStyle()来的到现有的List属性,而使用SetExtendedStyle()来进行设置即可.[6/30/2005]37.在使用CListCtrl时,使用了Sort进行排序,这时却只显示了最后的一行,其余的全部都是空行.Sort的选项有:None,Ascending和Descending.当选择为None时就正常显示,其余的升序和降序都不能正常显示.[6/30/2005]38.对于BSTR*类型参数的传递,在DynaGraph中的SetCaption定义如下:7/7/2005void SetCaption(BSTR* pInfo, short nChoose);我要调用他来进行Caption改变,但是我测试了很久都未能实现[以前成功使用过,不过太久了],而我又不想定义太多的变量来进行操作,所以问题变产生了。可行的解决方式如下[懒人方式]:BSTRstr=(BSTR)m_szValue.GetBuffer(0);m_ctlDGG.SetCaption(&str,++n);39.字符编码转换问题.[7/13/2005 Antipush use Dynagraph.ocx]在进行VC ActiveX(DynaGraph.ocx)在VB(Antipush)中使用时,出现了在ActiveX中不能正确识别所传入的字符串,究其原因,是因为字符编码不一致所造成的.之后在VB中使用编码转换函数进行转换之后在传入ActiveX中,问题得到圆满解决.在VB中用于编码转换的函数是:StrConv(string,conversion,LCID),conversion选择的是vbFromUnicode.如果是要用API进行转换,可以使用MultiByteToWideChar(…),可以参看MSDN的 Unicode and Character Set Functions &如果要查看编码方面的资料,可以到,有一篇叫做《汉字编码及其应用的研究》的论文。40.VB中解决传递引用(byref)空指针(NULL)的问题. [7/13/2005 Antipush use Dynagraph.ocx]在VB中,首先是没有指针,其次是没有真正意义上的空指针,而引用是针对传入的变量而言,而不是常数,再有就是ActiveX是没有重新声明接口的方式,故是没有办法传递引用参数类型的ActiveX的空指针的.只有通过别的办法来进行解决,例如传递标志,特殊数字等.但是如果是API的话,可以把传引用(byref)的声明更改为传值(byval)的声明即可以解决.41.在VB中的几个常值:TRUE=-1;FALSE=0;vbNull=1;Null=asc.还需要注意的是,在不同语言的开发工具之间,对于数字的编码以不一定相同.(0)[7/13/2005]42.IO输入有信号正/负之分,连接反了不能采集到信号。
正月是农历新年的开始,人们往往将它看作是新的一年年运好坏的兆示期。所以,过年的时候“禁忌”特别多。当然,各个地方的风俗习惯不一样,过年的禁忌也是不一样的。
想不想来一次环球旅行,抛开所有,走到一个陌生的地方,没有人认识,邂逅不同的自己。不管我们是带着什么目的出发的,最后常常能收获一份意外的惊喜。
2010Arthur
小马发光520
2010Arthur
TIM生命過客
请注意使用文明用语
文章总数:0
画报总数:0
画报点击数:0
文章点击数:0

我要回帖

更多关于 table 边框 的文章

 

随机推荐