当前位置:文档之家› OCCI Demonstration Programs

OCCI Demonstration Programs

OCCI Demonstration Programs
OCCI Demonstration Programs

OCCI Demonstration Programs

Oracle provides code examples illustrating the use of OCCI calls. These programs are provided for demonstration purposes, and are not guaranteed to run on all platforms.

The demonstration programs (demos) are available with your Oracle installation. The location, names, and availability of the programs may vary on different platforms. On a UNIX workstation, the programs are installed in the ORACLE_HOME/rdbms/demo directory.

The $ORACLE_HOME/rdbms/demo directory contains not only demos but the file named demo_rdbms.mk that must be used as a template for building your own OCCI applications or external procedures. Building a new

demo_rdbms.mk file consists of customizing the demo_rdbms.mk file by adding your own macros to the link line. However, Oracle requires that you keep the macros provided in the demo_rdbms.mk file, as it will result in simplified maintenance of your own demo_rdbms.mk files.

When a specific header or SQL file is required by the application, these files are also included. Review the information in the comments at the beginning of the demonstration programs for setups and hints on running the programs.

Prior to running any of these demos, the SQL file occidemo.sql must be run using the user name and password SCOTT and TIGER respectively.

Table A-1 lists the important demonstration programs and the OCCI features that they illustrate.

Table A-1 OCCI Demonstration Programs

OCCI Demonstration Programs

This section lists each of the OCCI demonstration program files, in addition to the demo make file.

demo_rdbms.mk

The following code is for the make file that generates the demonstration programs:

#

# Example for building demo OCI programs:

#

# 1. All OCI demos (including extdemo2, extdemo4 and extdemo5):

#

# make -f demo_rdbms.mk demos

#

# 2. A single OCI demo:

#

# make -f demo_rdbms.mk build EXE=demo OBJS="demo.o ..."

# e.g. make -f demo_rdbms.mk build EXE=oci02 OBJS=oci02.o

#

# 3. A single OCI demo with static libraries:

#

# make -f demo_rdbms.mk build_static EXE=demo OBJS="demo.o ..."

# e.g. make -f demo_rdbms.mk build_static EXE=oci02 OBJS=oci02.o #

# 4. To regenerate shared library:

#

# make -f demo_rdbms.mk generate_sharedlib

#

# 5. All OCCI demos

#

# make -f demo_rdbms.mk occidemos

#

# 6. A single OCCI demo:

#

# make -f demo_rdbms.mk

# e.g. make -f demo_rdbms.mk occidml

# OR

# make -f demo_rdbms.mk buildocci EXE=demoname OBJS="demoname.o ..." # e.g. make -f demo_rdbms.mk buildocci EXE=occidml OBJS=occidml.o #

# 7. A single OCCI demo with static libraries:

#

# make -f demo_rdbms.mk buildocci_static EXE=demoname

OBJS="demoname.o ..."

# e.g. make -f demo_rdbms.mk buildocci_static EXE=occiblob

OBJS=occiblob.o

#

# 8. All OCI Connection Pooling, Session Pooling and Statement Cache demos #

# make -f demo_rdbms.mk cpdemos

#

# 9. A single OCI Connection Pooling demo:

#

# make -f demo_rdbms.mk

# e.g. make -f demo_rdbms.mk ocicp

# OR

# make -f demo_rdbms.mk buildcp EXE=demoname OBJS="demoname.o ..." # e.g. make -f demo_rdbms.mk buildcp EXE=ocicp OBJS=ocicp.o

#

# 10. A single OCI Connection Pooling demo with static libraries:

#

# make -f demo_rdbms.mk buildcp_static EXE=demoname

OBJS="demoname.o ..."

# e.g. make -f demo_rdbms.mk buildcp_static EXE=ocicp OBJS=ocicp.o #

# 11. A single OCI Session Pooling demo:

#

# make -f demo_rdbms.mk

# e.g. make -f demo_rdbms.mk ocisp

# OR

# make -f demo_rdbms.mk buildcp EXE=demoname OBJS="demoname.o ..." # e.g. make -f demo_rdbms.mk buildcp EXE=ocisp OBJS=ocisp.o

#

# 12. A single OCI Session Pooling demo with static libraries:

#

# make -f demo_rdbms.mk buildcp_static EXE=demoname

OBJS="demoname.o ..."

# e.g. make -f demo_rdbms.mk buildcp_static EXE=ocisp OBJS=ocisp.o #

# 13. A single OCI Statement Cache demo:

#

# make -f demo_rdbms.mk

# e.g. make -f demo_rdbms.mk ocisc

# OR

# make -f demo_rdbms.mk buildcp EXE=demoname OBJS="demoname.o ..." # e.g. make -f demo_rdbms.mk buildcp EXE=ocisc OBJS=ocisc.o

#

# 14. A single OCI Statement Cache demo with static libraries:

#

# make -f demo_rdbms.mk buildcp_static EXE=demoname

OBJS="demoname.o ..."

# e.g. make -f demo_rdbms.mk buildcp_static EXE=ocisc OBJS=ocisc.o #

# Example for building demo DIRECT PATH API programs:

#

# 1. All DIRECT PATH API demos:

#

# make -f demo_rdbms.mk demos_dp

#

# 2. A single DIRECT PATH API demo:

#

# make -f demo_rdbms.mk build_dp EXE=demo OBJS="demo.o ..."

# e.g. make -f demo_rdbms.mk build_dp EXE=cdemdplp OBJS=cdemdplp.o #

#

# Example for building external procedures demo programs:

#

# 1. All external procedure demos:

#

# 2. A single external procedure demo whose 3GL routines do not use the # "with context" argument:

#

# make -f demo_rdbms.mk extproc_no_context SHARED_LIBNAME=libname # OBJS="demo.o ..."

# e.g. make -f demo_rdbms.mk extproc_no_context

SHARED_LIBNAME=epdemo.so

# OBJS="epdemo1.o

epdemo2.o"

#

# 3. A single external procedure demo where one or more 3GL routines use the

# "with context" argument:

#

# make -f demo_rdbms.mk extproc_with_context SHARED_LIBNAME=libname # OBJS="demo.o ..."

# e.g. make -f demo_rdbms.mk extproc_with_context

SHARED_LIBNAME=epdemo.so

# OBJS="epdemo1.o

epdemo2.o"

# e.g. make -f demo_rdbms.mk extproc_with_context

# SHARED_LIBNAME=extdemo2.so OBJS="extdemo2.o" # e.g. or For EXTDEMO2 DEMO ONLY: make -f demo_rdbms.mk demos

#

# 4. To link C++ demos:

#

# make -f demo_rdbms.mk c++demos

#

#

# NOTE: 1. ORACLE_HOME must be either:

# . set in the user's environment

# . passed in on the command line

# . defined in a modified version of this makefile

#

# 2. If the target platform support shared libraries (e.g. Solaris) # look in the platform specific documentation for information # about environment variables that need to be properly

# defined (e.g. LD_LIBRARY_PATH in Solaris).

#

include $(ORACLE_HOME)/rdbms/lib/env_rdbms.mk

# flag for linking with non-deferred option (default is deferred mode) NONDEFER=false

DEMO_DIR=$(ORACLE_HOME)/rdbms/demo

DEMO_MAKEFILE = $(DEMO_DIR)/demo_rdbms.mk

DEMOS = cdemo1 cdemo2 cdemo3 cdemo4 cdemo5 cdemo81 cdemo82 \

cdemobj cdemolb cdemodsc cdemocor cdemolb2 cdemolbs \

cdemodr1 cdemodr2 cdemodr3 cdemodsa obndra \

cdemoext cdemothr cdemofil cdemofor \

oci02 oci03 oci04 oci05 oci06 oci07 oci08 oci09 oci10 \

oci11 oci12 oci13 oci14 oci15 oci16 oci17 oci18 oci19 oci20 \ oci21 oci22 oci23 oci24 oci25 readpipe cdemosyev \

ociaqdemo00 ociaqdemo01 ociaqdemo02 cdemoucb nchdemo1

DEMOS_DP = cdemdpco cdemdpin cdemdpit cdemdplp cdemdpno cdemdpro cdemdpss

C++DEMOS = cdemo6

OCCIDEMOS = occiblob occiclob occicoll occidesc occidml occipool occiproc \

occistre

OCCIOTTDEMOS = occiobj occiinh occipobj

# OTT Markers Support

OCCIOTTDEMOSWITHMARKER = mdemo1

OTTUSR = scott

OTTPWD = tiger

CPDEMOS = ocicp ocicpproxy ocisp ocisc

.SUFFIXES: .o .cob .for .c .pc .cc .cpp

demos: $(DEMOS) extdemo2 extdemo4 extdemo5

demos_dp: $(DEMOS_DP)

generate_sharedlib:

$(SILENT)$(ECHO) "Building client shared library ..."

$(SILENT)$(ECHO) "Calling script

$$ORACLE_HOME/bin/genclntsh ..."

$(GENCLNTSH)

$(SILENT)$(ECHO) "The library is

$$ORACLE_HOME/lib/libclntsh.so... DONE"

BUILD=build

$(DEMOS):

$(MAKE) -f $(DEMO_MAKEFILE) $(BUILD) EXE=$@ OBJS=$@.o

$(DEMOS_DP): cdemodp.c cdemodp0.h cdemodp.h

$(MAKE) -f $(DEMO_MAKEFILE) build_dp EXE=$@ OBJS=$@.o

c++demos: $(C++DEMOS)

$(C++DEMOS):

$(MAKE) -f $(DEMO_MAKEFILE) buildc++ EXE=$@ OBJS=$@.o

buildc++: $(OBJS)

$(MAKECPLPLDEMO)

occidemos: $(OCCIDEMOS) $(OCCIOTTDEMOS) $(OCCIOTTDEMOSWITHMARKER)

$(OCCIDEMOS):

$(MAKE) -f $(DEMO_MAKEFILE) buildocci EXE=$@ OBJS=$@.o

$(OCCIOTTDEMOS):

$(MAKE) -f $(DEMO_MAKEFILE) ott OTTFILE=$@

$(MAKE) -f $(DEMO_MAKEFILE) buildocci EXE=$@ OBJS="$@.o $@o.o $@m.o"

# OTT Markers Support

$(OCCIOTTDEMOSWITHMARKER):

$(MAKE) -f $(DEMO_MAKEFILE) ott_mrkr OTTFILE=$@

$(MAKE) -f $(DEMO_MAKEFILE) buildocci EXE=$@ OBJS="$@.o $@o.o $@m.o"

buildocci: $(OBJS)

$(MAKEOCCISHAREDDEMO)

buildocci_static: $(OBJS)

$(MAKEOCCISTATICDEMO)

ott:

$(ORACLE_HOME)/bin/ott \

userid=$(OTTUSR)/$(OTTPWD) \

intype=$(OTTFILE).typ \

outtype=$(OTTFILE)out.type \

code=cpp \

hfile=$(OTTFILE).h \

cppfile=$(OTTFILE)o.cpp \

attraccess=private

# OTT Markers Suppport

ott_mrkr:

$(ORACLE_HOME)/bin/ott \

userid=$(OTTUSR)/$(OTTPWD) \

intype=$(OTTFILE).typ \

outtype=$(OTTFILE)out.type \

code=cpp \

hfile=$(OTTFILE).h \

cppfile=$(OTTFILE)o.cpp \

use_marker=true

cpdemos: $(CPDEMOS)

$(CPDEMOS):

$(MAKE) -f $(DEMO_MAKEFILE) buildcp EXE=$@ OBJS=$@.o buildcp: $(OBJS)

$(MAKECPSHAREDDEMO)

buildcp_static: $(OBJS)

$(MAKECPSTATICDEMO)

# Pro*C rules

# SQL Precompiler macros

pc1:

$(PCC2C)

.pc.c:

$(MAKE) -f $(DEMO_MAKEFILE) PCCSRC=$* I_SYM=include= pc1

.pc.o:

$(MAKE) -f $(DEMO_MAKEFILE) PCCSRC=$* I_SYM=include= pc1 $(PCCC2O)

.cc.o:

$(CCC2O)

.cpp.o:

$(CCC2O)

build: $(LIBCLNTSH) $(OBJS)

$(BUILDEXE)

extdemo2:

$(MAKE) -f $(DEMO_MAKEFILE) extproc_with_context SHARED_ LIBNAME=extdemo2.so OBJS="extdemo2.o"

extdemo4:

$(MAKE) -f $(DEMO_MAKEFILE) extproc_with_context SHARED_ LIBNAME=extdemo4.so OBJS="extdemo4.o"

extdemo5:

$(MAKE) -f $(DEMO_MAKEFILE) extproc_with_context SHARED_ LIBNAME=extdemo5.so OBJS="extdemo5.o"

.c.o:

$(C2O)

build_dp: $(LIBCLNTSH) $(OBJS) cdemodp.o

$(DPTARGET)

build_static: $(OBJS)

$(O2STATIC)

# extproc_no_context and extproc_with_context are the current names of these

# targets. The old names, extproc_nocallback and extproc_callback are # preserved for backward compatibility.

extproc_no_context extproc_nocallback: $(OBJS)

$(BUILDLIB_NO_CONTEXT)

extproc_with_context extproc_callback: $(OBJS) $(LIBCLNTSH)

$(BUILDLIB_WITH_CONTEXT)

clean:

$(RM) -f $(DEMOS) $(CPDEMOS) extdemo2 extdemo4 extdemo5 *.o *.so $(RM) -f $(OCCIDEMOS) $(OCCIOTTDEMOS) occi*m.cpp occi*o.cpp occi*.typ

occiobj*.h occiinh*.h occipobj*.h

$(RM) -f $(OCCIOTTDEMOSWITHMARKER) mdemo*m.cpp mdemo*o.cpp mdemo*.typ

mdemo*.h

$(RM) -f $(DEMOS_DP)

occiblob.cpp

The following code example demonstrates how to read and write aBLOB:

#include

#include

using namespace oracle::occi;

using namespace std;

/**

* The demo sample has starts from startDemo method. This method is called

* by main. startDemo calls other methods, the supporting methods for * startDemo are,

* insertRows - insert the rows into the table

* deleteRows - delete the rows inserted

* insertBlob - Inserts a blob and an empty_blob

* populateBlob - populates a given blob

* dumpBlob - prints the blob as an integer stream

*/

class demoBlob

{

private:

string username;

string password;

string url;

void insertRows (Connection *conn)

throw (SQLException)

{

Statement *stmt = conn->createStatement ("INSERT INTO

print_media(product_

id,ad_id,ad_composite,ad_sourcetext) VALUES

(6666,11001,'10001','SHE')");

stmt->executeUpdate();

stmt->setSQL ("INSERT INTO

print_media(product_id,ad_id,ad_composite,ad_

sourcetext) VALUES (7777,11001,'1010','HEM')");

stmt->executeUpdate();

conn->commit();

conn->terminateStatement (stmt);

}

void deleteRows (Connection *conn)

throw (SQLException)

{

Statement *stmt = conn->createStatement ("DELETE print_media WHERE product_

id = 6666 AND ad_id=11001");

stmt->executeUpdate();

stmt->setSQL ("DELETE print_media WHERE product_id = 7777 AND ad_id=11001");

stmt->executeUpdate();

conn->commit();

conn->terminateStatement (stmt);

}

/**

* populating the blob;

*/

void populateBlob (Blob &blob, int size)

throw (SQLException)

{

Stream *outstream = blob.getStream (1,0);

char *buffer = new char[size];

memset (buffer, (char)10, size);

outstream->writeBuffer (buffer, size);

char *c = (char *)"";

outstream->writeLastBuffer (c,0);

delete (buffer);

blob.closeStream (outstream);

}

/**

* printing the blob data as integer stream

*/

void dumpBlob (Blob &blob, int size)

throw (SQLException)

{

Stream *instream = blob.getStream (1,0);

char *buffer = new char[size];

memset (buffer, NULL, size);

instream->readBuffer (buffer, size);

cout << "dumping blob: ";

for (int i = 0; i < size; ++i)

cout << (int) buffer[i];

cout << endl;

delete (buffer);

blob.closeStream (instream);

}

/**

* public methods

*/

public:

demoBlob ()

{

/**

* default values of username & password

*/

username = "SCOTT";

password = "TIGER";

url = "";

}

void setUsername (string u)

{

username = u;

}

void setPassword (string p)

{

password = p;

}

void setUrl (string u)

{

url = u;

}

void runSample ()

throw (SQLException)

{

Environment *env = Environment::createEnvironment (

Environment::DEFAULT);

try

{

Connection *conn = env->createConnection (username, password, url);

Statement *stmt1;

insertRows (conn);

/**

* Reading a populated blob & printing its property.

*/

string sqlQuery = "SELECT ad_composite FROM print_media WHERE product_

id=6666";

Statement *stmt = conn->createStatement (sqlQuery);

ResultSet *rset = stmt->executeQuery ();

while (rset->next ())

{

Blob blob = rset->getBlob (1);

cout << "Opening the blob in Read only mode" << endl;

blob.open (OCCI_LOB_READONLY);

int blobLength=blob.length ();

cout << "Length of the blob is: " << blobLength << endl;

dumpBlob (blob, blobLength);

blob.close ();

}

stmt->closeResultSet (rset);

/**

* Reading a populated blob & printing its property.

*/

stmt->setSQL ("SELECT ad_composite FROM print_media WHERE product_id =7777

FOR UPDATE");

rset = stmt->executeQuery ();

while (rset->next ())

{

Blob blob = rset->getBlob (1);

cout << "Opening the blob in read write mode" << endl;

blob.open (OCCI_LOB_READWRITE);

cout << "Populating the blob" << endl;

populateBlob (blob, 20);

int blobLength=blob.length ();

cout << "Length of the blob is: " << blobLength << endl;

dumpBlob (blob, blobLength);

blob.close ();

}

stmt->closeResultSet (rset);

deleteRows (conn);

conn->terminateStatement (stmt);

env->terminateConnection (conn);

}

catch (SQLException ea)

{

cout << ea.what();

}

Environment::terminateEnvironment (env);

}

};//end of class demoBlob

int main (void)

{

demoBlob *b = new demoBlob ();

b->setUsername ("SCOTT");

b->setPassword ("TIGER");

b->runSample ();

}

occiclob.cpp

The following code example demonstrates how to read and write a CLOB:

#include

#include

using namespace oracle::occi;

using namespace std;

/**

* The demo sample has starts from startDemo method. This method is called

* by main. startDemo calls other methods, the supporting methods for * startDemo are,

* insertRows - inserts the rows into the table1

* deleteRows - delete the rows inserted

* insertClob - Inserts a clob and an empty_clob

* populateClob - populates a given clob

* dumpClob - prints the clob as an integer stream

*/

class demoClob

{

private:

string username;

string password;

string url;

void insertRows (Connection *conn)

throw (SQLException)

{

Statement *stmt = conn->createStatement ("INSERT INTO

print_media(product_

id,ad_id,ad_composite,ad_sourcetext) VALUES

(3333,11001,'10001','SHE')");

stmt->executeUpdate();

stmt->setSQL ("INSERT INTO

print_media(product_id,ad_id,ad_composite,ad_

sourcetext) VALUES (4444,11001,'1010','HEM')");

stmt->executeUpdate();

conn->commit();

conn->terminateStatement (stmt);

}

void deleteRows (Connection *conn)

throw (SQLException)

{

Statement *stmt = conn->createStatement ("DELETE print_media WHERE product_

id=3333 AND ad_id=11001");

stmt->executeUpdate();

stmt->setSQL("DELETE print_media WHERE product_id=4444 AND

ad_id=11001");

stmt->executeUpdate();

conn->commit();

conn->terminateStatement (stmt);

}

/**

* populating the clob;

*/

void populateClob (Clob &clob, int size)

throw (SQLException)

{

Stream *outstream = clob.getStream (1,0);

char *buffer = new char[size];

memset (buffer,'H', size);

outstream->writeBuffer (buffer, size);

char *c = (char *)"";

outstream->writeLastBuffer (c,0);

delete (buffer);

clob.closeStream (outstream);

}

/**

* printing the clob data as integer stream */

void dumpClob (Clob &clob, int size)

throw (SQLException)

{

Stream *instream = clob.getStream (1,0); char *buffer = new char[size];

memset (buffer, NULL, size);

instream->readBuffer (buffer, size);

cout << "dumping clob: ";

for (int i = 0; i < size; ++i)

cout << (char) buffer[i];

cout << endl;

delete (buffer);

clob.closeStream (instream);

}

/**

* public methods

*/

public:

demoClob ()

{

/**

* default values of username & password */

username = "SCOTT";

password = "TIGER";

url = "";

}

void setUsername (string u)

{

username = u;

}

void setPassword (string p)

{

password = p;

}

void setUrl (string u)

{

url = u;

}

void runSample ()

throw (SQLException)

{

Environment *env = Environment::createEnvironment (

Environment::DEFAULT);

try

{

Connection *conn = env->createConnection (username, password, url);

Statement *stmt1;

insertRows (conn);

/**

* Reading a populated clob & printing its property.

*/

string sqlQuery = "SELECT ad_sourcetext FROM print_media WHERE product_

id=3333";

Statement *stmt = conn->createStatement (sqlQuery);

ResultSet *rset = stmt->executeQuery ();

while (rset->next ())

{

Clob clob = rset->getClob (1);

cout << "Opening the clob in Read only mode" << endl;

clob.open (OCCI_LOB_READONLY);

int clobLength=clob.length ();

cout << "Length of the clob is: " << clobLength << endl;

dumpClob (clob, clobLength);

clob.close ();

}

stmt->closeResultSet (rset);

/**

* Reading a populated clob & printing its property.

*/

stmt->setSQL ("SELECT ad_sourcetext FROM print_media WHERE product_id

=4444 FOR UPDATE");

rset = stmt->executeQuery ();

while (rset->next ())

{

Clob clob = rset->getClob (1);

cout << "Opening the clob in read write mode" << endl; clob.open (OCCI_LOB_READWRITE);

cout << "Populating the clob" << endl;

populateClob (clob, 20);

int clobLength=clob.length ();

cout << "Length of the clob is: " << clobLength << endl; dumpClob (clob, clobLength);

clob.close ();

}

stmt->closeResultSet (rset);

conn->terminateStatement (stmt);

deleteRows(conn);

env->terminateConnection (conn);

}

catch (SQLException ea)

{

cout << ea.what();

}

Environment::terminateEnvironment (env);

}

};//end of class demoClob

int main (void)

{

demoClob *b = new demoClob ();

b->setUsername ("SCOTT");

b->setPassword ("TIGER");

b->runSample ();

}

occicoll.cpp

The following code example demonstrates how to perform simple insert, delete, and update operations on a table column of type Nested Table:

/**

*occicoll - To exhibit simple insert, delete & update operations"

* " on table having a Nested Table column

*

*Description

* Create a program which has insert,delete and update on a

* table having a Nested table column.

* Perform all these operations using OCCI interface.

*/

#include

#include

using namespace oracle::occi;

using namespace std;

typedef vector journal;

class occicoll

{

private:

Environment *env;

Connection *conn;

Statement *stmt;

string tableName;

string typeName;

public:

occicoll (string user, string passwd, string db)

{

env = Environment::createEnvironment (Environment::OBJECT);

conn = env->createConnection (user, passwd, db);

initRows();

}

~occicoll ()

{

env->terminateConnection (conn);

Environment::terminateEnvironment (env);

}

void setTableName (string s)

{

tableName = s;

}

void initRows ()

{

try{

Statement *st1 = conn->createStatement ("DELETE FROM journal_tab"); st1->executeUpdate ();

st1->setSQL("INSERT INTO journal_tab (jid, jname) VALUES (22, journal

('NATION', 'TIMES'))");

st1->executeUpdate ();

st1->setSQL("INSERT INTO journal_tab (jid, jname) VALUES (33, journal

('CRICKET', 'ALIVE'))");

st1->executeUpdate ();

conn->commit();

conn->terminateStatement (stmt);

}catch(SQLException ex)

{

cout<

}

}

/**

* Insertion of a row

*/

void insertRow ()

{

int c1 = 11;

journal c2;

c2.push_back ("LIFE");

c2.push_back ("TODAY");

c2.push_back ("INVESTOR");

cout << "Inserting row with jid = " << 11 <<

" and journal_tab (LIFE, TODAY, INVESTOR )" << endl;

try{

管理体系过程方法的概念和使用指南

最新国际质量管理文件 管理体系过程方法的概念和使用指南 1 引言 本文件为理解“过程方法”的概念、意图及其在ISO9000族质量管理体系标准中的应用提供指南。本指南也可用于其他管理体系采用过程方法,不论组织的类型和规模如何。 本指南的目的是推动描述过程的方法的一致性,并使用与过程有关的术语。 过程方法的目的是提高组织在实现规定的目标方面的有效性和效率。 过程方法的好处有: ?对过程进行排列和整合,使策划的结果得以实现; ?能够在过程的有效性和效率上下功夫; ?向顾客和其他相关方提供组织一致性业绩方面的信任; ?组织内运作的透明性; ?通过有效使用资源,降低费用,缩短周期; ?获得不断改进的、一致的和可预料的结果; ?为受关注的和需优先安排的改进活动提供机会; ?鼓励人员参与,并说明其职责。 2 什么是过程? “过程”可以定义为“将输入转化为输出的一组相互关联、相互作用的活动”。这些活动需要配置资源,如人员和材料。图1所示为通用的过程。

与其他方法相比,过程方法的主要优点是对这些过程间的相互作用和组织的职能层次间的接口进行管理和控制(在第4章中详细说明)。 输入和预期的输出可以是有形的(如设备、材料和元器件)或无形的(如能量或信息)。输出也可能是非预期的,如废料或污染。 每一个过程都有顾客和受过程影响的其他相关方(他们可以是组织内部的,也可以是外部的),他们根据其需求和期望规定所需要的输出。 应通过系统进行收集数据、分析数据,以提供有关过程业绩的信息,并确定纠正措施或改进的需求。 所有过程都应与组织的目标相一致,要规定所有过程都增值,与组织的规模和复杂程度相适应。 过程的有效性和效率可通过内部和外部评审过程予以评审。 3 过程的类型 可规定以下类型的过程 ——组织的管理过程。包括与战略策划、制定方针、建立目标、提供沟通、确保获得所需的资源和管理评审有关的过程。 ——资源管理过程。包括为组织的管理、实现、测量过程提供所需资源的所有过程。 ——实现过程。包括提供组织预期输出的所有过程。 ——测量、分析和改进过程。包括测量和收集业绩分析及提高有效性和效率的数据的那些过程,如测量、监视和审核过程,纠正和预防措施,它们是管理、资源管理和实现过程不可缺少的一部分。 4 过程方法的理解 过程方法是一种对如何使活动为顾客和其他相关方创造价值进行组织和管理的有力方法。

Mathematica函数大全(内置)

Mathematica函数大全--运算符及特殊符号一、运算符及特殊符号 Line1;执行Line,不显示结果 Line1,line2顺次执行Line1,2,并显示结果 ?name关于系统变量name的信息 ??name关于系统变量name的全部信息 !command执行Dos命令 n! N的阶乘 !!filename显示文件内容 > filename打开文件写 Expr>>>filename打开文件从文件末写 () 结合率 []函数 {}一个表 <*Math Fun*> 在c语言中使用math的函数 (*Note*)程序的注释 #n第n个参数 ##所有参数 rule& 把rule作用于后面的式子 %前一次的输出 %%倒数第二次的输出 %n第n个输出 var::note变量var的注释 "Astring "字符串 Context ` 上下文 a+b 加

a-b减 a*b或a b 乘 a/b除 a^b 乘方 base^^num以base为进位的数 lhs&&rhs且 lhs||rhs或 !lha非 ++,-- 自加1,自减1 +=,-=,*=,/= 同C语言 >,<,>=,<=,==,!=逻辑判断(同c) lhs=rhs立即赋值 lhs:=rhs建立动态赋值 lhs:>rhs建立替换规则 expr//funname相当于filename[expr] expr/.rule将规则rule应用于expr expr//.rule 将规则rule不断应用于expr知道不变为止param_ 名为param的一个任意表达式(形式变量)param__名为param的任意多个任意表达式(形式变量) 二、系统常数 Pi 3.1415....的无限精度数值 E 2.17828...的无限精度数值 Catalan 0.915966..卡塔兰常数 EulerGamma 0.5772....高斯常数 GoldenRatio 1.61803...黄金分割数 Degree Pi/180角度弧度换算 I复数单位 Infinity无穷大

堡垒主机用户操作手册运维管理

堡垒主机用户操作手册 运维管理 版本2.3.2 2011-06 目录1.前言...................................................... 1.1.系统简介 .............................................. 1.2.文档目的 .............................................. 1.3.读者对象 .............................................. 2.登录系统.................................................. 2.1.静态口令认证登录 (3) 2.2.字证书认证登录 ........................................ 2.3.动态口令认证登录 ...................................... 2.4.LDAP域认证登录........................................ 2.5.单点登录工具 ..........................................

3.单点登录(SS0)........................................... 3.1.安装控件 .............................................. 3.2.单点登录工具支持列表 .................................. 3.3.单点登录授权资源查询 .................................. 3.4.单点登录操作 .......................................... Windows资源类(域内主机\域控制器 \windows2003\2008) Unix\Linux资源类............................... 数据库(独立)资源类 ........................... ORACLE_PLSQL单点登录........................... ORACLE_SQLDeveleper单点登录.................... MSSQLServer2000查询分析器单点登录.............. MSSQLServer2000企业管理器单点登录.............. SQLServer2005ManagementStudio单点登录.......... SQLServer2008ManagementStudio单点登录.......... SybaseDbisqlg单点登录..........................

半天工程序操作指南

一.实名登记完整流程 二.半天工程序操作指南 (一)主页(功能简介) 半天工程序了实现工地现场的务工人员实名登记管理、实名考勤管理、工资发放信息公示和其他系统管理功能。 (二)专户信息登记 1.管理工程 左键单击【专户信息登记】→【管理工程】,点击项目名称左边的图标,可查看项目专户信息,该信息不可更改,如需更改请联系半天工客服人员。

2.基本信息 左键单击【专户信息登记】→【基本信息】,可填写项目的基本信息。 注意:请程序操作人员(劳资专管员)正确填写本人身份证号,同时关注半天工微信公众号,在微信号内绑定个人身份证号码即可接收工人登记信息提醒。 3.微信用户管理 左键单击【专户信息登记】→【微信用户管理】,填写人员身份证信息,添加多个微信用户,关注微信公众号并绑定后即可接收工人登记信息提醒。 (三)实名登记管理 注意:务工人员实名制登记时,请严格按照【用工单位登记】→【务工班组登记】→【务工人员实名制进场登记】的顺序来操作。 1. 用工单位管理

左键单击【实名登记管理】→【用工单位管理】,填写用工单位信息。 2. 务工班组登记 左键单击【实名登记管理】→【务工班组登记】,添加务工班组信息(请准确选择务工班组所属企业)。如需删除或修改务工班组信息,请点击班组名称左边图标进行编辑操作。 3. 务工人员实名制进场登记 注意:务工人员实名制登记进场有两种操作方法,一是在【实名登记管理】→【务工人员实名制进场登记】界面进行人员进场登记,二是在【实名登记管理】→【工人花名册】界面进行人员进场登记。这里先介绍第一种方法,第二种方法在下面会介绍。 (1)左键单击【实名登记管理】→【务工人员实名制进场登记】,点击左侧的[全部班组] →[xxx单位] →[xxx班组],然后点击右侧的[进场登记],开始进场登记操作。

db2top工具详解(翻译)

Database (d) Figure 2. Database screen 在数据库屏幕,db2top提供了一组对整个数据库的性能监控单元。 用户可以监视活动会话(MaxActSess),排序内存(SortMemory)和日志空间(LogUsed)。这些监测元素可以帮助用户确定这些元素的当前使用百分比。如果这些因素中的一个开始达到很高甚至100%时,用户应该开始调查发生了什么事。 当前时间和数据库开始时间(Start Time)相比能让我们了解数据库运行了多久。这个值结合其他检测元素去调查那些已存在一段时间的问题是非常有用的。 锁的使用(LockUsed)和升级(LockEscals)对缩小锁定问题非常有帮助。如果LockEscals 数量很大时,则增加LOCKLIST和MAXLOCKS数据库参数是一个好主意或者寻找那些引起这个问题的不良查询语句。 L_Reads,P_Reads和A_Reads代表逻辑读,物理读和异步读取。结合的命中率(HitRatio)值,这些变量对于评估大多数的读取发生在存储器中还是磁盘I / O里是非常重要的。因为磁盘的I / O比存储器存取慢得多,用户更喜欢访问在内存中的数据。当用户看到HitRatio 下降低则可以查看缓冲池(bufferpools)是不是不够大了,或是不是有查询进行了太多的全白扫描而导致页面数据从内存洗冲到磁盘。 和读类似,A_Writes代表异步写入,这表明数据页是由异步页清洁剂之前写的缓冲池空间是必需的。通过db2top 刷新频率这段时间内的写数量我们还能知道有多少写请求发生了。还能计算每次写入的平均花费时间这对分析I/O瓶颈引起的一些性能问题有所帮助。当A_Writes/Writes的比值越高则写I/O性能越高。 SortOvf代表排序溢出。如果用户发现这个数字变为非常高,就需要寻找查询了。排序溢出发生在SORTHEAP不足够大,导致排序(Sort)或HashJoin操作可能会溢出数据到临时空间。有时该值随着SORTHEAP增加而降低,但在其他情况下,可能没有多大帮助,如果进行排序的数据集比可分配给SORTHEAP内存大得多。如果请求的数据量超过缓冲池可容纳的临时空间大小那么就可能需要物理I/O来进行SORT或哈希链接在这种情况下排序溢出将是很大的瓶颈。因此优化查询来减少排序溢出的数量能显著提高系统的性能。

MathStudio函数说明

Math Studio—— Math Studio1M Catalog Catalog Math Studio https://www.doczj.com/doc/5c11170523.html,/Manual Manual Wolfram mathematica Det det diff Diff ALGEBRA Apart, Coefficient, Degree , Denominator, Divisors , DivisorSigma, Eval, Expand , Factor, GCD, LCM , PolyDivide, PolyFit, PolyGCD , PolyLCM, PowerExpand, Quotient , Remainder, Sequence, SimplifyPoly , Solve, SolveSystem, Together BASIC Abs, Arg, Conj, Exp, Hyperbolic Functions, Im , Imag, Ln, Log, Re, Real, Trigonometric Functions CALCULUS D, Diff, DSolve , fDiff, FourierCos, FourierSeries , FourierSin, iDiff, iLaplace , Integrate, Laplace, Limit , NIntegrate, pDiff, Product , Series, Sum CAS Append Call,Caps , Char

, Choose, Clear, Command, Date , Delete, Extract , Function, Insert, IsList , IsMatrix, IsNumber , IsPoly, Left, Length , List, Matrix , Part, Replace, Reshape , Reverse, Right , Size, Sort, String , Value Converts a string to a value, Variables DATA Constant, Finance , HRStoHMS , LoadList , LoadMatrix, Table ELEMENTARY Binomial, Ceil, Eulerian, Factorial, Floor , fPart, iPart , Mod, Multinomial, nCr , nPr, nRoot, Pochhammer, Round, Sign, Sqrt GRAPHING clip, FullRectSineWave, HalfRectSineWave( ), SawToothWave(), SquareWave, StaircaseWave, TriangleWave MANUAL Code Files, Commands, Creating Scripts, Entering Expressions, Graphing Equations, Include Folder, Lists, Matrices, Strings , Symbols, Time Graphing MATRIX

db2top

DB2TOP(1) User Manuals DB2TOP(1) NAME db2top ? DB2 performance monitor SYNOPSIS db2top [?d dbname] [?n nodename] [?u username] [?p pass?- word] [?V schema] [?i interval] [?P ] [?b option] [?a] [?B] [?k] [?R] [?x] [?f file <+offset> ] [?D delimiter] [?C

小程序使用说明文档

小程序使用说明文档 1.登录角色: 本次小程序主要支持的登录角色有:代理商、业务员两种角色 2.功能模块: 本次一期小程序主要实现的功能有三个,第一个商户经营状况查询;第二个商户预警提醒功能;第三个数据罗盘。 (1)商户经营状况 商户经营状况中,可以查看到所登录角色下属的所有活跃商户的交易状况(如果某个商户某一天一条交易记录都没有,那么它不会出现在当天的经营状况列表里面) 商户经营状况可以按照商户名查询某一个商户的经营状况;也可以按照具体某一天,或者按月来查询下属商户的交易状况;当然,这两个条件是可以组合使用的,你可以查询下属商户某一天或者某一个月份的经营情况! (2)商户预警 预警提醒功能分两个页签:“预警信息”和“等待确认”,都可支持按照商户名进行搜索 预警提醒中会显示登录角色下属的所有昨天交易量相对前天有所下降的商户,并且会按照下降比例从高到低的顺序进行排序。在预警提醒中,可以预警商户进行操作。 对于处于正常波动范围内的商户,点击长按,在弹出框中点击“忽略”,即可从预警信息列表中清楚该数据。

对于下降比例不正常的商户,点击长按,在弹出框中选择“等待确认”,即可把该条记录添加到等待确认列表中(预警列表中的数据每天都会刷新,所以请务必记得把异常商户及时添加到等待确认列表!)。 等待确认列表列表中显示当前登录角色从预警信息列表中添加过来的所有商户数据,在改列表中可以对商户进行处理。 对于不小心误操作过来的商户,可以点击长按,选择“正常”,从该列表中清楚该条数据。 对于无法挽回的商户,点击长按,在弹出框中选择“确认流失”,填写流失原因说明(必填!)后可从该列表中移出该条数据。 对于已经做出处理并挽回的商户,点击长按,在弹出框中选择“确认处理”,填写处理方法(必填)后,可从该列表中移出该记录。 对于所有添加到等待确认列表中的商户,具体的处理方法和处理说明记录,都有在数据库做记录。 (3)数据罗盘 数据罗盘主要是展示当前登录角色下的所有商户的交易情况的一些汇总信息。如:昨日交易总金额、较上周昨日同比增长或下降比例,昨日交易总笔数、较上周昨日同比增长或下降比例,累计开户数、本月新开户数;以及下属商户的星级占比饼图。 昨日交易总金额、较上周昨日同比增长或下降比例:昨日交易金额是指当前登录角色昨天的首款总额;较上周昨日同比增长或下降比例是指,昨天的交易总额和上周的同一天(如昨天是周二,就和上周二进行比较)的交易总额的上浮或下降比例[(昨天交易金额-上周昨日交易金额)/上周昨日交易金额] 昨日交易总笔数、较上周昨日同比增长或下降比例:比较方式与昨日交易总金额一样,只是以笔数为统计单位。 累计开户数和本月新开户数:累计开户数是当前登录角色下属所有的商户个数;本月新开是指进件日期为当前月份的商户个数。 星级排行:即后台的商户星级排行功能以饼图形式的展现,类别“其它”是指暂时没有星级的

commvault 操作手册

CommVault备份系统安装配置手册

目录 第一章湛江港备份应用环境描述 (3) 1.1 CommVault服务器环境 (3) 1.2 CommVault软件安装信息 (3) 1.3 Exchange环境 (3) 第二章备份系统安装及配置 (3) 2.1安装前准备(Windows操作系统) (4) 2.2 Commvault软件安装 (4) 2.3 客户端安装 (8) 2.3.1虚拟机客户端安装(Vitual Server Agent) (8) 2.3.2 Exchange客户端安装 (9) 2.4许可证管理 (14) 2.5存储介质管理 (16) 2.6存储策略配置 (18) 第三章VMware备份配置及恢复 (21) 3.1虚拟机备份配置 (21) 3.2虚拟机备份 (23) 3.3虚拟机恢复 (24) 第四章 Exchange备份配置及恢复 (26) 4.1 Exchange邮箱备份配置 (26) 4.2 Exchange邮箱备份 (28) 4.3 Exchange邮箱恢复 (30) 4.4 Exchange数据库备份配置 (31) 4.5 Exchange数据库备份 (32) 4.6 Exchange数据库恢复 (34)

第一章应用环境描述 1.1 CommVault服务器环境 CommVault服务器型号:IBM-3650-M2 CommVault服务器名称:cv Commvault服务器域名:https://www.doczj.com/doc/5c11170523.html, CommVault服务器IP地址:xxx.xxx.xxx.xxx CommVault服务器操作系统:Windows2008 (64位) Web访问路径:http://xxx.xxx.xxx.xxx/console 1.2 CommVault软件安装信息 CV-SQL密码:xxxx Commvault客户端名:cv Commvault登录用户名:xxxx Commvault登录密码:xxxxx DR备份设置:D:\CVDR 1.3 Exchange环境 一、Exchange备份架构 二、Exchange架构环境描述 Exchange服务器操作系统:Windows2008 R2 (X64)Exchange版本:2010 现有5台虚拟服务器作为Exchange环境, 2台作为Exchange数据库服务器,采用DAG技术(Exdb1, Exdb2), 2台作为客户端服务器做了负载均衡 (Excas1, Excas2), 1台作为边缘服务器(Exedge1) 第二章备份系统安装及配置

软件使用说明书模板

(仅供内部使用) 文档作者:_____________________ 日期:___/___/___ 说明书校对:_____________________ 日期:___/___/___ 产品经理:_____________________ 日期:___/___/___ 请在这里输入公司名称 版权所有不得复制

软件使用说明书模板 1引言 1 .1编写目的 编写本使用说明的目的是充分叙述本软件所能实现的功能及其运行环境,以便使用者了解本软件的使用范围和使用方法,并为软件的维护和更新提供必要的信息。 1 .2参考资料 略 1 .3术语和缩写词 略 2 软件概述 2 .1软件用途 本软件的开发是为具有电能质量仪表,可以获取电能数据的技术人员提供一个有利的分析工具。 2 .2软件运行 本软件运行在PC 及其兼容机上,使用WINDOWS 操作系统,在软件安装后,直接点击相应图标,就可以显示出软件的主菜单,进行需要的软件操作。 2 .3系统配置 本软件要求在PC 及其兼容机上运行,要求奔腾II以上CPU,64兆以上内存,10G 以上硬盘。软件需要有WINDOWS 98 操作系统环境。 2 .4软件结构 略 2 .5软件性能 略 2 .6输入、处理、输出 2 .6.1输入 略 2 .6.2处理 略 2 .6.3输出 分析数据为: 略

图表有: 略 3 软件使用过程 3 .1软件安装 直接点击软件的安装软件SETUP.EXE ;然后按照软件的提示进行。 3 .2运行表 略 3 .3运行步骤 略 3 .4运行说明 略 3 .4.1控制输入 按照软件的说明,将测试数据加入到软件中;具体过程如下: 略 3 .4.2管理信息 软件运行过程中的密码键入: 略 3 .4.3输入输出文件 略 3 .4.4输出报告 略 3 .4.5输出报告复制 略 3 .4.6再启动及恢复过程 略 3 .5出错处理 软件运行过程中可能雏形的出物及处理如下: 略 3 .6非常规过程 如果出现不可能处理的问题,可以直接与公司的技术支持人员联系:略

math 函数大全

一、运算符及特殊符号 Line1; 执行Line,不显示结果 Line1,line2 顺次执行Line1,2,并显示结果?name 关于系统变量name的信息 ??name 关于系统变量name的全部信息 !command 执行Dos命令 n! N的阶乘 !!filename 显示文件内容 < Expr>> filename 打开文件写 Expr>>>filename 打开文件从文件末写 () 结合率 [] 函数 {} 一个表 <*Math Fun*> 在c语言中使用math的函数(*Note*) 程序的注释 #n 第n个参数 ## 所有参数 rule& 把rule作用于后面的式子 % 前一次的输出 %% 倒数第二次的输出

%n 第n个输出 var::note 变量var的注释 "Astring " 字符串 Context ` 上下文 a+b 加 a-b 减 a*b或a b 乘 a/b 除 a^b 乘方 base^^num 以base为进位的数 lhs&&rhs 且 lhs||rhs 或 !lha 非 ++,-- 自加1,自减1 +=,-=,*=,/= 同C语言 >,<,>=,<=,==,!= 逻辑判断(同c) lhs=rhs 立即赋值 lhs:=rhs 建立动态赋值 lhs:>rhs 建立替换规则 lhs->rhs 建立替换规则 expr//funname 相当于filename[expr] expr/.rule 将规则rule应用于expr expr//.rule 将规则rule不断应用于expr知道不变为止

param_ 名为param的一个任意表达式(形式变量) param__ 名为param的任意多个任意表达式(形式变量) ————————————————————————————————————— 二、系统常数 Pi 3.1415....的无限精度数值 E 2.17828...的无限精度数值 Catalan 0.915966..卡塔兰常数 EulerGamma 0.5772....高斯常数 GoldenRatio 1.61803...黄金分割数 Degree Pi/180角度弧度换算 I 复数单位 Infinity 无穷大 -Infinity 负无穷大 ComplexInfinity 复无穷大 Indeterminate 不定式 ————————————————————————————————————— 三、代数计算 Expand[expr] 展开表达式 Factor[expr] 展开表达式 Simplify[expr] 化简表达式

sqc基础库使用手册

SqcLib库接口定义 新的sqc基础库采用c++封装,开发人员只需要从基础类Db2Tools派生自己的业务类。然后重载基础类的busiLogic方法,就可以完成自己业务逻辑处理。具体的处理流程为: 1、在基础类Db2Tools的run方法中完成对具体应用参数的解析。 2、run方法调用busiLogic方法,完成具体的业务逻辑 3、busiLogic方法中调用基础类的常用数据库访问方法,完成对数据库的操作。 4、在基础类的数据库访问方法中,除完成指定的数据库操作外,同时完成日志输出和相关事务控制。[日志的输出目录为profile文件中定义的AGENTTRACEDIR目录,如果没有定义,取默认路径] 1函数列表 1.1数据库类(Db2Tools) 该类有两个主要功能: 1、实现数据库访问 2、完成对具体业务逻辑调用和事务控制 ●connDb 函数原形:int connDb(const char *m_para_conn) 用途:连接数据库 参数:m_para_conn:数据库名dbname 返回:1.输入的数据库参数不对 2.密码参数环境变量设置错误 3.数据库连接失败 0.数据库连接成功 ●busiLogic 函数原形:int busiLogic(void) 用途:业务逻辑入口 参数: 返回: ●run 函数原形:int run(int argc,char *argv[]) 用途:实例开始入口 参数:argc:参数个数

Argv:参数数组 (通常取main函数入口参数) 返回:0:成功,其它:失败 ●db2RunstatTab 函数原形:int db2RunstatTab(char *tabname,char *file,int line) 用途:对表做runstats 参数:tabname:输入需要runstats的表名,schema.tabname或者tabname(schema默认为用户名) 返回:-1:失败 0:成功 ●db2Insert 函数原形:int db2Insert(char *sqlstr,char *tabname,char *file,int line) 用途:提交insert语句 参数: sqlstr:insert sql语句 file: line: 返回:-1:失败 0:成功 ●db2Update 函数原形:int db2Update(char *sqlstr,char *tabname,char *file,int line) 用途:提交update语句 参数: sqlstr:update sql语句 file: line: 返回:-1:失败 0:成功 ●db2Delete 函数原形:int db2Delete(char *sqlstr,char *tabname,char *file,int line) 用途:提交delete语句 参数: sqlstr:delete sql语句 file: line: 返回:-1.失败 0.成功 ●db2DropTab 函数原形:int db2DropTab(char *tabname,char *file,int line) 用途:删除表 参数: tabname:需要删除的表名,schema.tabname file:

math中函数以及其他一些库函数

函数以及其他一些库函数 函数名称: abs 函数原型: int abs(int x); 函数功能: 求整数x的绝对值 函数返回: 计算结果 参数说明: 所属文件: <>,<> 使用范例: #include <> #include <> int main() { int number=-1234; printf("number: %d absolute value: %d",number,abs(number)); return 0; } @函数名称: fabs 函数原型: double fabs(double x); 函数功能: 求x的绝对值. 函数返回: 计算结果 参数说明: 所属文件: <> 使用范例: #include <> #include <> int main() { float number=; printf("number: %f absolute value: %f",number,fabs(number)); return 0; } @函数名称: cabs 函数原型: double cabs(struct complex znum) 函数功能: 求复数的绝对值 函数返回: 复数的绝对值 参数说明: zuum为用结构struct complex表示的复数,定义如下:struct complex{ double m; double n; }

所属文件: <> #include <> #include <> int main() { struct complex z; double val; =; =; val=cabs(z); printf("The absolute value of %.2lfi %.2lfj is %.2lf",,,val); return 0; } @函数名称: ceil 函数原型: double ceil(double num) 函数功能: 得到不小于num的最小整数 函数返回: 用双精度表示的最小整数 参数说明: num-实数 所属文件: <> #include <> #include <> int main() { double number=; double down,up; down=floor(number); up=ceil(number); printf("original number %",number); printf("number rounded down %",down); printf("number rounded up %",up); return 0; } @函数名称: sin 函数原型: double sin(double x); 函数功能: 计算sinx的值.正弦函数 函数返回: 计算结果 参数说明: 单位为弧度 所属文件: <> 使用范例:

Win32程序快速入门指南

Win32程序快速入门指南 1.程序说明 示例程序放在Win32ShapeOrg中 1.1_tWinMain _tWinMain是程序入口。 while (GetMessage(&msg, NULL, 0, 0))开始为消息处理循环。 如果程序运行到此处将进入一个消息响应过程,即如果有消息就会进入消息响应函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 1.2全局初始化 如果要做全局初始化可以在tWinMain函数中while (GetMessage(&msg, NULL, 0, 0))前1.3消息响应机制 win32程序是基于消息响应的,最核心的模块是消息响应函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 消息是依附在某个窗口的。其中hWnd是窗口句柄,windows程序里,每一个窗口都有一个HWND类型的句柄用于标识这个窗口。 message是UINT类型的消息,实质上整数,消息的其它信息包含在wParam和lParam中 1.4绘制函数 WM_PAINT是绘制消息,所有和绘制相关的代码都放在WM_PAINT消息响应部分(具体在hdc = BeginPaint(hWnd, &ps);和EndPaint(hWnd, &ps);之间),win32所有绘制函数都带有一个HDC类型设备上下文句柄的参数。 InvalidateRect(hWnd, NULL, true);语句会发出绘制消息。如果需要更新绘制画面,就可以调用此语句。 Windows绘制机制的基础是图像设备交互(GDI,Graphics Device Interface)。 Brush是用来填充的刷子,绘制的东西是实心的。Pen相当于画笔,用来描述绘制直线曲线时的颜色粗细样式等等。如果不做设置,系统会提供默认的设置。 直线和曲线函数在这里,这是一个直线段的例子。 //显示文字 char cMessage[128]; sprintf(cMessage, "%d, %d", g_xPos, g_yPos); SetBkMode(hdc, TRANSPARENT); //设置背景透明显示模式 TextOut(hdc, g_xPos+10, g_yPos-10, cMessage, strlen(cMessage)); //实心椭圆 int r = 9; Ellipse(hdc, g_xPos-r, g_yPos-r, g_xPos+r, g_yPos+r); //当前位置坐标&位置+直径: //空心椭圆 MoveToEx(hdc, g_xPos+r, g_yPos, 0); AngleArc(hdc, g_xPos, g_yPos, r, 0, 360); //画线

相关主题
文本预览
相关文档 最新文档