Column Name |
Data Type |
Example |
Description |
LangId |
int |
2 |
Language ID |
HtmlName |
varchar(50) |
iso-8859-1 |
HTML character set name (written to generated pages)
|
CodePage |
int |
1252 |
Windows code page appropriate for the language |
SiteSuffix |
char(2) |
de |
Directory suffix for the translated site |
Name |
varchar(50) |
German |
Human-readable language name
(for tools) |
Figure 2 StringIds Table
Column Name |
Data Type |
Example |
Description |
StringId |
int |
1009 |
Numerical string ID
|
Figure 3 Strings Table
Column Name |
Data Type |
Example |
Description |
StringId |
int |
1009 |
Numerical string ID |
LangId |
int |
2 |
The language this string version is in
|
Str |
nvarchar(2000) |
Bitte geben sie ihr kennwort ein. |
The language-specific version of this string |
Figure 4 PageRanges Table
Column Name |
Data Type |
Example |
Description |
PageUrl |
varchar(200) |
/Default.asp |
The URL of the page relative to the server name |
BaseId |
int |
1000 |
The starting ID for strings on this page |
Figure 5 The Button DTC in an ASP Page
<!--METADATA TYPE="DesignerControl" startspan
<OBJECT classid="clsid:B6FC3A14-F837-11D0-9CC8-006008058731"
id=Button1 style="LEFT: 0px; TOP: 0px">
<PARAM NAME="_ExtentX" VALUE="1773">
<PARAM NAME="_ExtentY" VALUE="714">
<PARAM NAME="id" VALUE="Button1">
<PARAM NAME="Caption" VALUE="Button1">
<PARAM NAME="Image" VALUE="">
<PARAM NAME="AltText" VALUE="">
<PARAM NAME="Visible" VALUE="-1">
<PARAM NAME="Platform" VALUE="256">
<PARAM NAME="LocalPath" VALUE=""></OBJECT>
-->
<!--#INCLUDE FILE="_ScriptLibrary/Button.ASP"-->
<SCRIPT LANGUAGE=JavaScript RUNAT=Server>
function _initButton1()
{
Button1.value = 'Button1';
Button1.setStyle(0);
}
function _Button1_ctor()
{
CreateButton('Button1', _initButton1, null);
}
</script>
<% Button1.display %>
<!--METADATA TYPE="DesignerControl" endspan-->
Figure 6 Generating Runtime Text
STDMETHODIMP CTestCtl1::QueryPersistenceInterface(REFIID iid)
{
if (iid == IID_IPersistTextStream)
return S_OK;
return S_FALSE;
}
STDMETHODIMP CTestCtl1::SaveRuntimeState(
REFIID iidPersist, REFIID iidObjStgMed,
void * pObjStgMed)
{
HRESULT hr = S_OK;
IStream * pStm;
ULONG cbWritten;
CComBSTR sText;
if (iidPersist != IID_IPersistTextStream)
return E_INVALIDARG;
if (iidObjStgMed != IID_IStream)
return E_INVALIDARG;
pStm = static_cast<IStream *>(pObjStgMed);
sText = L"blah blah blah";
hr = pStm->Write(sText.m_str,
sText.Length() * sizeof (OLECHAR), &cbWritten);
return hr;
}
Figure 9 IDesignTimeControl Methods
STDMETHODIMP CTestCtl1::get_DesignTimeControlSet(BSTR * pbstr)
{
(*pbstr) = NULL; // No-op
return S_OK;
}
STDMETHODIMP CTestCtl1::OnGetChoices(Choices *)
{
return S_OK; // No-op
}
STDMETHODIMP CTestCtl1::OnRebind(Choices *)
{
return S_OK; // No-op
}
STDMETHODIMP CTestCtl1::OnChoiceConflict(Choice *, VARIANT_BOOL)
{
return S_OK; // No-op
}
STDMETHODIMP CTestCtl1::OnChoiceChange(ChoiceSink * pCS,
dtcChoiceChange change)
{
return S_OK;
}
STDMETHODIMP CTestCtl1::OnHostingChange(dtcHostingChange change, VARIANT_BOOL *)
{
return S_OK;
}
Figure 10 putref_DesignTimeControlSite
STDMETHODIMP
CTestCtl1::putref_DesignTimeControlSite(IDesignTimeControlSite *pSite)
{
HRESULT hr = S_OK;
m_spSite = pSite;
if (pSite != NULL)
{
CComPtr<ChoiceSinks> spChoiceSinks;
CComVariant vType(L"TargetEnvironment");
VARIANT vText;
vText.vt = VT_ERROR;
hr = pSite->get_ChoiceSinks(&spChoiceSinks);
if (hr != S_OK)
return hr;
hr = spChoiceSinks->AddChoiceSink(vType, vText,
&m_spChoiceSink);
if (hr != S_OK)
return hr;
}
return hr;
}
Figure 11 OnChoiceChange
STDMETHODIMP CSinkDTC::OnChoiceChange(ChoiceSink * pCS,
dtcChoiceChange change)
{
HRESULT hr = S_OK;
if (pCS == m_spChoiceSink)
{
CComPtr<Choice> spChoice;
hr = pCS->get_BoundChoice(&spChoice);
if (hr != S_OK)
return hr;
if (spChoice == NULL)
return E_POINTER;
CComPtr<Tags> spTags;
hr = spChoice->get_Tags (&spTags);
if (hr != S_OK)
return hr;
if (spTags == NULL)
return E_POINTER;
CComVariant varTagIndex = L"path";
CComVariant varTagValue;
hr = spTags->get_Item (varTagIndex, &varTagValue);
if (hr != S_OK)
return hr;
if (varTagValue.vt == VT_BSTR)
m_strPath = varTagValue.bstrVal;
SetDirty(true);
SendOnDataChange(0); // Notify the container.
FireViewChange(); // Display the change.
}
return hr;
}